verilog中的posedge只能在时钟上使用吗?
可以在非时钟的变量上检测到posedge吗 例如,我有一个复位按钮R,每当按下该按钮时,应将机器复位到启动状态verilog中的posedge只能在时钟上使用吗?,verilog,Verilog,可以在非时钟的变量上检测到posedge吗 例如,我有一个复位按钮R,每当按下该按钮时,应将机器复位到启动状态 always @ (posedge clk, posedge R) if(R) reset_the_machine(); else use_the_next_state(); 在信号上使用边缘(如set或reset)是模板模式合成工具选择的产物,用于在单个始终块中表示异步逻辑。如果您没有使用posedge限定R,则R的负边缘(negedge)将
always @ (posedge clk, posedge R)
if(R)
reset_the_machine();
else
use_the_next_state();
在信号上使用边缘(如set或reset)是模板模式合成工具选择的产物,用于在单个始终块中表示异步逻辑。如果您没有使用posedge
限定R
,则R
的负边缘(negedge
)将执行use next\u state()
分支。因此,模拟将重置的释放解释为时钟的posedge
最初开发Verilog时,目的是使用单独的始终
块,用于使用过程连续赋值的同步和异步行为
always @(R)
if (R)
assign state = initial_state;
else
deassign state;
always @(posedge clk)
state <= next_state;
始终@(R)
if(R)
分配状态=初始状态;
其他的
解除指派国;
始终@(posedge clk)
陈述你的问题中有两个问题:
verilog中的posegde只能在时钟上使用吗
答案是否定的
可以在非时钟的变量上检测到posedge吗
答案是肯定的
verilog语言中没有时钟。每个信号都是相等的。在任何变量的模拟中都可以检测到边缘。边缘检测本身就是一种模拟伪影
时钟只是一种现代的硬件制品。verilog程序反映硬件行为,因此需要以特定的硬件相关方式对时钟进行编程。但这只是一个编程技巧
关于您的示例,请参阅dave-59的答案。这是一个典型的异步有源高电平复位。