初级会员
- 积分
- 147
- 金钱
- 147
- 注册时间
- 2021-4-4
- 在线时间
- 18 小时
|
1金钱
从学verilog就知道c<=1在时序电路里是下个时钟周期C才等于1,可是今天仿真的波形当前周期就变1了,特来求助。
源代码如下:
- `timescale 1ns / 1ps
- module test(
- input clk,
- input rstn,
- input p1,
- input p2,
- input tvalid,
- output reg c,
- output reg o
- );
- // reg c;
- always@(posedge clk or negedge rstn)
- begin
- if(!rstn)
- begin
- c<=1'b0;
- o<=1'b0;
- end
- else
- begin
- o<=&{c,tvalid};
- if(p1==p2)
- begin
- c<=1'b1;
- end
- else
- begin
- c<=1'b0;
- end
- end
- end
- endmodule
复制代码 接下来一段是testbench代码段,也很简单:
- `timescale 1ns / 1ps
- module tb_test(
- );
- reg clk;
- reg rstn;
- reg p1;
- reg p2;
- reg tvalid;
- initial begin
- clk=0;
- rstn=0;
- p1=0;
- p2=1;
- tvalid=0;
- #20 rstn=1;
- #80 tvalid=1;
- end
- always #10 clk=~clk;
- //always #10 p1=~p1;
- always #20 p2=~p2;
- wire o;
- test u_test(
- .clk(clk),
- .rstn(rstn),
- .p1(p1),
- .p2(p2),
- .tvalid(tvalid),
- .c(c),
- .o(o)
- );
- endmodule
复制代码 源代码的作用就是输入p1,p2,tvalid,如果p1==p2,c<=1,同时如果tvalid==1,则o=1
按照道理p1==p2时,下个时钟周期c才置一,但是仿真的波形如下:
看图片红圈部分,此时p1=0,p2=0,这是c直接置一了!!请问,这是我代码哪里有问题吗?
|
|