24小时热门版块排行榜    

查看: 700  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 340求调剂 +4 话梅糖111 2026-03-24 4/200 2026-03-24 21:41 by yuyu98412
[考研] 材料调剂 +6 匹克i 2026-03-23 6/300 2026-03-24 21:09 by greychen00
[考研] 300分,材料,求调剂,英一数二 +5 超赞的 2026-03-24 5/250 2026-03-24 21:07 by 星空星月
[考研] 307求调剂 +3 余意卿 2026-03-21 6/300 2026-03-24 15:03 by 余意卿
[考研] 081700 调剂 267分 +9 迷人的哈哈 2026-03-23 9/450 2026-03-24 11:58 by 544594351
[考研] 环境学硕288求调剂 +8 皮皮皮123456 2026-03-22 8/400 2026-03-23 23:47 by 热情沙漠
[考研] 一志愿国科过程所081700,274求调剂 +3 三水研0水立方 2026-03-23 3/150 2026-03-23 23:11 by MajorWen
[考研] 一志愿上海交大生物与医药专硕324分,求调剂 +5 jiajunX 2026-03-22 5/250 2026-03-23 18:07 by YMU施老师
[考研] 工科0856求调剂 +5 沐析汀汀 2026-03-21 5/250 2026-03-23 17:56 by 海瑟薇-
[考研] 306求调剂 +9 chuanzhu川烛 2026-03-18 9/450 2026-03-23 13:17 by luoyongfeng
[考研] 263求调剂 +6 yqdszhdap- 2026-03-22 9/450 2026-03-23 12:57 by yqdszhdap-
[考研] 354求调剂 +7 Tyoumou 2026-03-18 10/500 2026-03-22 11:11 by 人来盛
[考研] 一志愿华中科技大学071000,求调剂 +4 沿岸有贝壳6 2026-03-21 4/200 2026-03-22 07:21 by ilovexiaobin
[考研] 材料学硕301分求调剂 +7 Liyouyumairs 2026-03-21 7/350 2026-03-21 22:31 by peike
[考研] 一志愿深大,0703化学,总分302,求调剂 +4 七月-七七 2026-03-21 4/200 2026-03-21 18:20 by 学员8dgXkO
[考研] 材料 271求调剂 +5 展信悦_ 2026-03-21 5/250 2026-03-21 17:29 by 学员8dgXkO
[考研] 0817 化学工程 299分求调剂 有科研经历 有二区文章 +22 rare12345 2026-03-18 22/1100 2026-03-20 20:39 by zhukairuo
[考研] 295材料求调剂,一志愿武汉理工085601专硕 +5 Charlieyq 2026-03-19 5/250 2026-03-20 20:35 by JourneyLucky
[考研] 本科郑州大学物理学院,一志愿华科070200学硕,346求调剂 +4 我不是一根葱 2026-03-18 4/200 2026-03-19 09:11 by 浮云166
[考研] 收复试调剂生 +4 雨后秋荷 2026-03-18 4/200 2026-03-18 14:16 by elevennnne
信息提示
请填处理意见