重定义在ModelSim仿真中的便捷实用

前提良好的代码风格习惯,极大地增加了调试效率


部分代码段
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 …. 相同的时间,跑出来的波形可以自行尝试对比

你可能感兴趣的:(FPGA中遇到的小问题)