verilog中的posedge只能在时钟上使用吗?

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)将

可以在非时钟的变量上检测到posedge吗

例如,我有一个复位按钮R,每当按下该按钮时,应将机器复位到启动状态

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的答案。

这是一个典型的异步有源高电平复位。