Verilog语言中的赋值问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 20:24:16
在a变量的上升沿到来之后,再等待b的下降沿,然后才可以对c赋值
这段程序应该怎么来写
在a的上升沿到来之后,等待b的下降沿,此时a可以已经重新恢复到低电平了
二楼你那个是错的把

不知道你是要做验证还是设计,如果是验证的话,不要求可综合,可以简单写成:
always@ (posedge a)
begin
@ (negedge b)
c<=...;
end
如果要想可综合的话,需要用状态机类似的概念,
即设一个标志位,当a上升沿来是,把它赋值为1,
当它为1且b下降沿来时,给c赋值,并将它赋值回0:
并且,如果a,b不是时钟的话,不推荐使用posedge的写法
采用下面的方法比较好:

reg a_dly,b_dly; //a,b的1始终delay信号
wire a_pos,b_pos; //a,b的上升沿抓取信号
assign a_pos = a & !a_dly;
assign b_pos = b & !b_dly;
reg flag;//标志位

always@(posedge clk or posedge rst)
begin
if(rst) begin
a_pos <= 1'b0;
b_pos <= 1'b0;
end
else begin
a_pos <= a;
b_pos <= b;
end
end

always@(posedge clk or posedge rst)
begin
if(rst)
flag <= 1'b0;
else if(a_pos)
flag <= 1'b1;
else if(b_pos)
flag <= 1'b0;
end

always@(posedge clk)
begin
if(flag & b_pos)
c<=....
end
把fla