24小时热门版块排行榜    

Znn3bq.jpeg
查看: 714  |  回复: 1

zhangyuque

新虫 (正式写手)

[求助] verilog小白求助大神

我想实现两个四位数的全加器,将结果用七段数码管显示出来,但是在仿真的时候出不来对应的仿真结果下面是我的主程序和测试程序:
module Lab6(
                clk,
                rst,
                A,
                B,
                Cin,
                led1,                        //数码管的显示值
                led2,       
                led3,       
                led4,       
                an      //数码管的片选端
    );
                input                                                        clk;
                input                                                        rst;
                input                [3:0]                        A;
                input                [3:0]                        B;
                input                                                        Cin;
                output        [6:0]                        led1;
                output        [6:0]                        led2;
                output        [6:0]                        led3;
                output        [6:0]                        led4;
                output        [3:0]                        an;
               
                reg                        [6:0]                        led1;
                reg                        [6:0]                        led2;
                reg                        [6:0]                        led3;
                reg                        [6:0]                        led4;
                reg                        [5:0]                        cnt;   //用来计算每个数码管之间的时间
                reg                        [3:0]                        an;
                wire                [3:0]                        sum;
                wire                                                        count;   //加法器的最高位进位数
                reg                        [1:0]                        cnt_led;    //用于计算第几个数码管

                parameter                                        DATA0=7'b1111110;
                parameter                                        DATA1=7'b0110000;
               
//一个全加器
                assign        {count,sum}=A+B+Cin;
               
                always@(posedge clk or posedge rst)begin
                        if(rst)begin
                                cnt<=0;
                        end
                        else if(cnt==6'd49)begin
                                cnt<=0;
                        end
                        else begin
                                cnt<=cnt+1'b1;
                        end
                end                            //每个数码管之间的间隔是0.2s
               
                always@(posedge clk or posedge rst)begin
                        if(rst)begin
                                cnt_led<=0;
                        end
                        else if(cnt==6'd49)begin
                                if(cnt_led==2'd4)begin
                                        cnt_led<=0;
                                end
                                else begin
                                        cnt_led<=cnt_led+1'b1;
                                end
                        end
                end                               //先给每个数码管与时钟信号之间的关系先梳理出来
               
                always@(posedge clk or posedge rst)begin
                        if(rst)begin
                                an<=4'hf;
                        end
                        else if (cnt==6'd49&&cnt_led==0)begin
                                an<=4'b0001;
                        end
                        else if (cnt==6'd49&&cnt_led==1)begin
                                an<=4'b0010;
                        end
                        else if (cnt==6'd49&&cnt_led==2)begin
                                an<=4'b0100;
                        end  
                        else if (cnt==6'd49&&cnt_led==3)begin
                                an<=4'b1000;
                        end
                end   
//接下来将sum中的值显示在数码管上
                always@(posedge clk or posedge rst)begin
                        if(rst)begin
                                led1<=7'b0000000;
                        end
                        else if(an==4'b0001)begin
                                if(sum[0]==0)begin
                                        led1<=DATA0;
                                end
                                else begin       
                                        led1<=DATA1;
                                end
                        end
                end
               
                always@(posedge clk or posedge rst)begin
                        if(rst)begin
                                led2<=7'b0000000;
                        end
                        else if(an==4'b0001)begin
                                if(sum[1]==0)begin
                                        led2<=DATA0;
                                end
                                else begin       
                                        led2<=DATA1;
                                end
                        end
                end
               
                always@(posedge clk or posedge rst)begin
                        if(rst)begin
                                led3<=7'b0000000;
                        end
                        else if(an==4'b0001)begin
                                if(sum[2]==0)begin
                                        led3<=DATA0;
                                end
                                else begin       
                                        led3<=DATA1;
                                end
                        end
                end
               
                always@(posedge clk or posedge rst)begin
                        if(rst)begin
                                led4<=7'b0000000;
                        end
                        else if(an==4'b0001)begin
                                if(sum[3]==0)begin
                                        led4<=DATA0;
                                end
                                else begin       
                                        led4<=DATA1;
                                end
                        end
                end       
endmodule

测试程序:
module Lab6_testbench;

        // Inputs
        reg clk;
        reg rst;
        reg [3:0] A;
        reg [3:0] B;
        reg Cin;

        // Outputs
        wire [6:0] led1;
        wire [6:0] led2;
        wire [6:0] led3;
        wire [6:0] led4;
        wire [3:0] an;

        // Instantiate the Unit Under Test (UUT)
        Lab6 uut (
                .clk(clk),
                .rst(rst),
                .A(A),
                .B(B),
                .Cin(Cin),
                .led1(led1),
                .led2(led2),
                .led3(led3),
                .led4(led4),
                .an(an)
        );

        initial begin
                // Initialize Inputs
                clk=0;
                forever
                #4
                clk=~clk;
        end
       
        initial begin
                rst = 1;
                #2;       
                rst =0;
                #20;
                rst =1;
                #2;       
                rst =0;
        end                    // 定义初始信号
               
        initial begin               
                A = 4'b1011;
                #4;
                A = 4'b1000;
                #4;
                A = 4'b1001;
                #4;
                A = 4'b0111;
                #4;
                A = 4'b0111;
        end
       
        initial begin
                B = 4'b0111;
                #4;
                B = 4'b1000;
                #4;
                B = 4'b1011;
                #4;
                B = 4'b1100;
                #4;
                B= 4'b1101;
        end
       
        initial begin
                Cin=0;
                forever
                #4
                Cin=~Cin;
        end
endmodule
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jim09

木虫 (著名写手)

2楼2018-09-08 15:38:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zhangyuque 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 河北省自然科学基金 +5 Peterchao 2026-05-18 7/350 2026-05-23 16:57 by articlefan
[基金申请] 揭秘青基评审内幕:几个A才能顺利中标 +3 国自然国社科中 2026-05-23 4/200 2026-05-23 15:37 by 2000zf36392
[论文投稿] 投MDPI的三个期刊都被桌拒 +4 木虫研究牲 2026-05-17 5/250 2026-05-23 14:44 by 期刊投稿求助
[考博] 26/27申博自荐 10+4 ZXW0202 2026-05-22 6/300 2026-05-23 14:32 by tfang
[基金申请] 青B发送上会通知了吗 +5 chemBioBro 2026-05-22 7/350 2026-05-23 12:35 by zhuifengzhy
[考博] 博士申请 +3 焦晓明 2026-05-21 3/150 2026-05-23 11:26 by mlc840311
[基金申请] 今年审到国自然15份,谈谈感受 +27 国自然国社科中 2026-05-17 28/1400 2026-05-22 16:25 by hunter无悔
[论文投稿] 投稿求助,期刊 +4 希冀,有书读 2026-05-20 8/400 2026-05-22 10:16 by 希冀,有书读
[文学芳草园] 献血感触 +7 呀呀好傻 2026-05-19 13/650 2026-05-21 20:15 by 呀呀好傻
[基金申请] 面上本子正文33页,违规吗?会被低分嘛? +14 1234567wang 2026-05-17 16/800 2026-05-21 17:58 by 脆脆的饼干
[基金申请] 国自然评分 +4 无名者登山 2026-05-20 5/250 2026-05-21 16:35 by swuq
[基金申请] 国自然上会要求 +7 无名者登山 2026-05-18 11/550 2026-05-21 15:50 by draco1987
[基金申请] 提交了我也来说说感想 +9 fummck 2026-05-20 10/500 2026-05-21 14:17 by draco1987
[基金申请] 评审有感 +15 popular289 2026-05-18 26/1300 2026-05-21 10:35 by 西葫芦炒鸡蛋
[论文投稿] Sci. Bull. 悲剧经验 +7 jyang1999 2026-05-16 8/400 2026-05-21 08:50 by 能丫
[考博] 云南大学材料与能源学院解琳课题组钙钛矿博士招生 +4 光伏爱好者 2026-05-17 6/300 2026-05-21 01:37 by 17520222914
[有机交流] 反应很差,大量原料没有反应 5+3 Mr.Zot 2026-05-19 8/400 2026-05-20 22:19 by Equinoxhua
[考博] 如果工作了想读博,可以边工作边读全日制嘛? 30+3 铁达火车 2026-05-18 5/250 2026-05-20 09:33 by tfang
[考博] 博士申请 +5 星…… 2026-05-18 6/300 2026-05-18 23:49 by 糊糊涂涂好
[硕博家园] 我在等一个没有答案的答案 +3 Love_MH 2026-05-17 3/150 2026-05-18 02:22 by 竹林孤影
信息提示
请填处理意见