学习Verilog中遇到的一个问题
时间:10-02
整理:3721RD
点击:
刚开始学写Verilog,很简单的一个testbench
注意write8bit里面的第二句话。如果不加这句话,data的改变总是会比clk晚半个周期。不知道这是为什么?
- `timescale 10ns/1ns module t_test1(x_out, x_clk, x_en); output x_out; output x_clk; output x_en; reg d_out; reg d_clk; reg d_en; reg[7:0] i;parameter default_clock=1;
- assign x_out = d_out;assign x_clk = d_clk;assign x_en = d_en;
- initial begin d_en = 1; d_out = 1; d_clk = 1; //put you code here #5; //write1bit(8, 1); write1bit(10, 1); write8bit(0, 8'b10101010); HZstate(7);end
- task write1bit(input integer clk_cycle, input integer data); begin if (clk_cycle == 0) begin d_clk = 0; d_out = data%2; #default_clock d_clk = 1; #default_clock d_clk = 0; end else begin d_clk = 0; d_out = data%2; #clk_cycle d_clk = 1; #clk_cycle d_clk = 0; end endendtask
- task write8bit(input integer clk_cycle, input integer data); begin d_clk <= 0; d_out <= data%2; if(clk_cycle == 0) begin for(i=1;i<17;i=i+1) begin #default_clock; d_out <= (data>>(i>>1))%2; d_clk <= !d_clk; end end else begin for(i=1;i<17;i=i+1) begin #clk_cycle; d_out <= (data>>(i>>1))%2; d_clk <= !d_clk; end end endendtaskendmodule
注意write8bit里面的第二句话。如果不加这句话,data的改变总是会比clk晚半个周期。不知道这是为什么?
你的代码直接编译有错误的啊
- `timescale 10ns/1ns
- module task01(x_out, x_clk, x_en);
- output x_out, x_clk, x_en;
- reg d_out, d_clk, d_en;
- reg[7:0] i;
- parameter default_clock = 1;
- assign x_out = d_out;
- assign x_clk = d_clk;
- assign x_en = d_en;
- initial
- begin
- d_en = 1;
- d_out = 1;
- d_clk = 1; //put you code here
- #5;
- //write1bit(10, 0);
- write8bit(0, 8'b10101010);
- #5;
- end
- task write1bit(input integer clk_cycle, input integer data);
- begin
- if (clk_cycle == 0)
- begin
- d_clk = 0;
- d_out = data%2;
- #default_clock d_clk = 1;
- #default_clock d_clk = 0;
- end
- else
- begin
- d_clk = 0;
- d_out = data%2;
- #clk_cycle d_clk = 1;
- #clk_cycle d_clk = 0;
- end
- end
- endtask
- task write8bit(input integer clk_cycle, input integer data);
- begin
- if(clk_cycle == 0)
- begin
- for(i = 0; i < 8; i = i+1)
- begin
- d_clk = 1'b0;
- d_out = (data >> i)%2;
- #default_clock;
- d_clk = ~d_clk;
- #default_clock;
- end
- end
- else
- begin
- for(i = 0; i < 8; i = i+1)
- begin
- d_clk = 1'b0;
- d_out = (data >> i)%2;
- #clk_cycle;
- d_clk = ~d_clk;
- #default_clock;
- end
- end
- end
- endtask
- endmodule
我按自己的理解把你code重写了一遍 clk和data能对齐的。
btw,我也只是verilog入门而已。
