24小时热门版块排行榜    

查看: 677  |  回复: 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 的主题更新
信息提示
请填处理意见