system-verilog - 在 RTL 仿真中将生成的时钟定义为同步的
问题描述
我正在生成一个分频时钟,如下所示:
logic div_clk;
always_ff @(posedge clk or negedge rstb) begin
if(!rstb) div_clk <= 1'b0;
else div_clk <= !div_clk;
end
然后我启动数据clk
并在div_clk
. 像这样的东西:
always_ff @(posedge clk) begin
clk_data <= something;
end
always_ff @(posedge div_clk) begin
div_clk_data <= clk_data;
end
在我的模拟中,我得到了一个竞争条件,因为clk_data
更新同时发生div_clk
并且div_clk_data
得到了错误的值。
在综合中,我通过创建生成的时钟将这两个时钟定义为同步:
create_clock -name CLK [get_ports clk]
create_generated_clock -name GEN_DIV_CLK -source [get_ports clk] -divide_by 2 [get_pins div_clk]
是否有一些等效的东西可以放入我的 RTL 中,或者我可以做些什么来告诉我的模拟器div_clk
同步clk
并防止竞争条件发生?
解决方案
这是不应使用 NBA 的情况。如果您希望时钟保持同步,则时钟树(包括门控时钟)中不应包含任何 NBA。
推荐阅读
- ruby-on-rails - 有没有办法获取 action_text 为 nill 的所有记录
- r - 无论 x 标签如何,都保持绘图的大小,无论有多少条,都保持条的大小
- python - python - 如何在Python中的pandas数据框中分配节点之间的概率,使得从父节点到子节点的概率不超过100%?
- c++ - Don Box - Essential COM:当删除运算符是成员函数时,为什么要将创建运算符定义为非成员函数?
- windows - 我如何在专注于 Virtual Box 的同时抑制主机系统上的“CTRL ALT DELETE”
- python - pygame俄罗斯方块发烧模式添加计时器
- css - v-autocomplete 中的长文本
- python - 努力在 Python 中将 pdf 附加到 MIMEMultipart() 电子邮件
- c - 我创建了一个返回平方根的算法。为什么它不工作?
- java - Java - 我如何创建一个在程序后台运行的计时器,同时仍然允许用户进行交互?