verilog - D触发器的输出不如预期
问题描述
它是异步重置。D触发器当我将复位从一更改为零时,它不会立即将输出从零提高到一。但是当我添加@always(posedge clk 或 posedge reset 或 negedge reset )时,它会立即改变
验证:
module dff_async_reset (
data , // Data Input
clk , // Clock Input
reset , // Reset input
q // Q output
);
//-----------Input Ports---------------
input data, clk, reset ;
//-----------Output Ports---------------
output q;
//------------Internal Variables--------
reg q;
//-------------Code Starts Here---------
always @ ( posedge clk or posedge reset)
begin
if (reset)
q =0;
else
q <= data;
end
endmodule //End Of Module dff_async_reset
对应波形:
解决方案
它完全按照您的要求执行:模仿具有异步高电平有效复位的触发器。您的代码中的以下行
always @ (posedge clk or posedge reset)
clk
说:“在进行过渡0 --> 1
或reset
进行过渡时执行此程序块0 --> 1
。” 换句话说,当reset
进行转换时1 --> 0
,这个 always 块将不会被评估。
您的值q
只会在 的上升沿更新,clk
如果您想设计触发器,这正是您想要的。
当您添加negedge reset
到您的敏感度列表时,它确实会在您退出重置状态时立即更改(这1 --> 0
在您的逻辑中)。然而,这通常是不希望的。相反,您应该将复位的取消断言与时钟信号同步。引用上述网站:
大多数设计的建模方式需要异步复位断言和同步解除断言。如今,大多数设计的要求是:
- 当复位被断言时,它会传播到所有设计;无论时钟是否切换,都使它们进入重置状态;即断言应该是异步的
- 当复位无效时,等待时钟沿,然后根据 FSM(有限状态机)将系统移动到下一个状态;即取消断言应该是同步的
推荐阅读
- react-native - 如何在 React Native 中访问类之外的类的状态变量?
- java - 如何使用 jUnit 5 Assertions 检查异常消息是否以字符串开头?
- php - 在laravel中下载PDF后重定向
- javascript - 如何在 Laravel 中导出具有日期范围的 Excel 数据?
- angular - 有什么方法可以将数据从 for 循环传递到 ngTemplateOutlet
- ios - Flutter NoSuchMethodError:getter 'length' 仅在 iOS 上被调用为 null
- php - Woocommerce 产品存档页面 - 自定义布局
- java - 运行 Concordion Fixure 文件时无法找到规范异常
- ios - 初始化 MLUpdateTask 导致信号 SIGABRT:加载文件时出错:*.mlmodelc/model.espresso.weights
- javascript - 如何使用 jinja2 和 python 烧瓶在下拉列表中选择特定选项时在 html 表中显示数据