前提良好的代码风格习惯,极大地增加了调试效率
部分代码段
RS232_TX文件
module RS232_TX(
//input....
//output ....
);
parameter Baud_MAX = 16'd5207;
parameter Start = 1'b0;
parameter Stop = 1'b1;
...
endmodule
RS232_RX文件
module RS232_RX(
//input ....
//output ...
);
parameter Baud_MAX = 16'd5207;
parameter Baud_MID = 16'd2603;
parameter Start = 1'b0;
parameter Stop = 1'b1;
.....
endmodule
仿真tb文件
`timescale 1ns/1ps
module UART_FIFO_tb;
reg clk,rst_n;
reg rs232_rx;
wire rs232_tx;
defparam UART_FIFO_inst.RS232_RX_inst.Baud_MAX=52;//
defparam UART_FIFO_inst.RS232_RX_inst.Baud_MID=26;//
defparam UART_FIFO_inst.RS232_TX_inst.Baud_MAX=52;//
initial clk = 1;
always #10 clk = ~clk;
initial begin
rst_n = 0;
#200
rst_n = 1;
end
initial begin//调用任务
rs232_rx <= 1'b1;
#100
data_r();
end
reg[7:0]a_mem[7395:0];
initial begin
$readmemh("data.txt",a_mem);//相当于初始化a_mem, h为十六进制
end
task data_r();//task的嵌套调用
integer i;
for(i=0;i<7396;i=i+1)begin
rx_bit(a_mem[i]);
end
endtask
task rx_bit(input [7:0]data);
integer j;
for(j=0;j<10;j=j+1)begin
case(j)
0: rs232_rx <=1'b0;
1: rs232_rx <= data[0];
2: rs232_rx <= data[1];
3: rs232_rx <= data[2];
4: rs232_rx <= data[3];
5: rs232_rx <= data[4];
6: rs232_rx <= data[5];
7: rs232_rx <= data[6];
8: rs232_rx <= data[7];
9: rs232_rx <= 1'b1;
endcase
#1040;
end
endtask
UART_FIFO UART_FIFO_inst(
//.....
);
endmodule
**defparam UART_FIFO_inst.RS232_RX_inst.Baud_MAX=52;//
defparam UART_FIFO_inst.RS232_RX_inst.Baud_MID=26;//
defparam UART_FIFO_inst.RS232_TX_inst.Baud_MAX=52;//**
在tb中调用任务读取文件,大量的数据,如果不使用重定义参数,我们要看完仿真结果需要等多久….喝杯茶,,,吃点食品,,,估计还在仿真呢
要是在遇到我们修改数据需要重新仿真呢,你还要继续等吗???
大量的时间浪费在等波形…
那我们用重定义后的效果呢
对比一下原数据5207,2603….改变后的数据呢 52,26 …. 相同的时间,跑出来的波形可以自行尝试对比