鱼C论坛

 找回密码
 立即注册
查看: 1974|回复: 3

求助嘛,有会verilog的大神吗帮忙看看仿真为啥出问题

[复制链接]
发表于 2020-3-6 22:30:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
实现一个两个输入地址两个输出数据的寄存器,代码放下面,给了一些注释。verilog仿真出来两个输出的rdata都是0,不知道是design文件出了问题还是testbench出了问题,有好心的大佬能不能帮忙看看?谢谢!!

design文件:
`define DATA_WIDTH 32
`define ADDR_WIDTH 5

module reg_file(
    input clk,
    input rst,
    input [`ADDR_WIDTH - 1:0] waddr,
    input [`ADDR_WIDTH - 1:0] raddr1,
    input [`ADDR_WIDTH - 1:0] raddr2,
    input wen,
    input [`DATA_WIDTH - 1:0] wdata,
    output [`DATA_WIDTH - 1:0] rdata1,
    output [`DATA_WIDTH - 1:0] rdata2
    );
    integer i;
    reg [31:0]r[0:4];
    initial
        for(i=0; i<5; i=i+1)
            r[i] <= 0;
        
    always @ (posedge clk)
    begin
        if(rst)
        for(i=0; i<5; i=i+1)
            r[i] <= 0;
        else
            if(wen)
                if(waddr != 0)
                    r[waddr] <= wdata;
                else
                    r[waddr] <= 0;
    end
   
   
    assign rdata1 = r[raddr1];
    assign rdata2 = r[raddr2];
endmodule

testbench文件:
`define DATA_WIDTH 32
`define ADDR_WIDTH 5

module reg_file_tb();
    reg clk;
    reg rst;
    reg [`ADDR_WIDTH - 1:0] waddr;
    reg wen;
    reg [`DATA_WIDTH - 1:0] wdata;
    reg [`ADDR_WIDTH - 1:0] raddr1;
    reg [`ADDR_WIDTH - 1:0] raddr2;
    wire [`DATA_WIDTH - 1:0] rdata1;
    wire [`DATA_WIDTH - 1:0] rdata2;
   
    initial begin
    clk = 0;
    forever #5 clk = ~clk;
    end
   
    initial begin
    rst = 1;
    wen = 1;
    end
   
    initial begin
        waddr = 1;
    #5  waddr = 2;
    #5  waddr = 3;
    #5  waddr = 4;
    #5  waddr = 0;
    end
   
    initial begin
        wdata = 132;
    #5  wdata = 189;
    #5  wdata = 2;
    #5  wdata = 65;
    #5  wdata = 233;
    end
   
    initial begin
        raddr1 = 0;
    #5  raddr1 = 1;
    #5  raddr1 = 2;
    #5  raddr1 = 3;
    #5  raddr1 = 4;
    end
   
    initial begin
        raddr2 = 1;
    #5  raddr2 = 2;
    #5  raddr2 = 3;
    #5  raddr2 = 4;
    #5  raddr2 = 0;
    end
   
    reg_file u_reg_file(
        .clk(clk),
        .rst(rst),
        .waddr(waddr),
        .raddr1(raddr1),
        .raddr2(raddr2),
        .wen(wen),
        .wdata(wdata),
        .rdata1(rdata1),
        .rdata2(rdata2)
    );
   
endmodule
(简单起见只随便列了几个状态,将就着看看~)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-8 11:39:43 | 显示全部楼层
已解决...rst初值一直赋的1...是我傻了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-24 15:49:16 | 显示全部楼层
Shaky_00 发表于 2020-3-8 11:39
已解决...rst初值一直赋的1...是我傻了

竟然在鱼c问verilog
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-23 18:38:50 | 显示全部楼层
我也来学verilog了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 02:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表