实验2 基于加法器的设计

实验2 基于加法器的设计

  1. 设计7段数码管的驱动电路,4位输入,7段输出,使数码管能显示16进制的16个字符,注意DE10-Lite的数码管是共阳连接.

直接用case语句写出查找表.代码如下:

module seg7(data_in,data_out);

input [3:0]data_in;

  • output reg [6:0]data_out;

 

always @(data_in)

case(data_in)

4'h0:data_out=7'b100_0000; // 0

4'h1:data_out=7'b111_1001; // 1  

4'h2:data_out=7'b010_0100; // 2

4'h3:data_out=7'b011_0000; // 3

4'h4:data_out=7'b001_1001; // 4

4'h5:data_out=7'b001_0010; // 5

4'h6:data_out=7'b000_0010; // 6

4'h7:data_out=7'b111_1000; // 7

4'h8:data_out=7'b000_0000; // 8

4'h9:data_out=7'b001_0000; // 9

4'h9:data_out=7'b000_1000; // A

4'h9:data_out=7'b000_0011; // b

4'h9:data_out=7'b100_0110; // C

4'h9:data_out=7'b010_0001; // d

4'h9:data_out=7'b000_0110; // E

4'h9:data_out=7'b000_1110; // F

default:data_out=7'b111_1111;

endcase

endmodule

 

  1. 组合4位加法器

用Verilog实现以下模块:

1)   1位全加器模块fa.v。其输入为a,b和ci,输出为co和sum。逻辑表达式为

sum = a^b^ci;

co = ab + aci + bci;

参考代码如下:

module fa(

                input a,b,ci,

                output co,s

                );

               

assign s = a^b^ci;

assign co = a&b | b&ci | a&ci;

 

endmodule

 

2)   例化1位全加器,实现4位行波进位加法器add4bit.v。其结构如图1所示:

 

图 1  4位行波进位加法器

参考代码:

module add4bit(

                   input [3:0] a,b,

                   input ci,

                   output co,

                   output [3:0] s

                   );

                  

wire co0,co1,co2;                 

                  

fa a0(

                .a(a[0]),.b(b[0]),.ci(ci),

                .co(co0),.s(s[0])

                );     

fa a1(

                .a(a[1]),.b(b[1]),.ci(co0),

                .co(co1),.s(s[1])

                ); 

fa a2(

                .a(a[2]),.b(b[2]),.ci(co1),

                .co(co2),.s(s[2])

                ); 

fa a3(

                .a(a[3]),.b(b[3]),.ci(co2),

                .co(co),.s(s[3])

                );     

 

endmodule

 

  1. 顶层模块设计

用SystemBuilder新建一个工程,模块命名为top.v。

1)   它例化2次add4bit.v。

2)   分别用4个拨动开关代表4位加法器的输入,两个加法的输入用相同的4个拨动开关。

3)   其中一个加法器的另一个输入为0000,另一个加法器的另一个输入为0001。

4)   每个加法器的输出通过seg7.v驱动数码管显示。

如果电路工作正常,会在两个数码管上看到相应的结果,必然开关的组合是1001,两个数码管分别显示9和A。

//=======================================================

//  REG/WIRE declarations

//=======================================================

wire [3:0] a0,a1,b0,b1;

wire [3:0] s0,s1;

wire co0,co1;

 

//=======================================================

//  Structural coding

//=======================================================

assign a0 = SW[3:0];

assign a1 = SW[3:0];

assign b0 = 4'b0000;

assign b1 = 4'b0001;

 

assign LEDR[3:0] = b0;

assign LEDR[9:6] = b1;

 

add4bit a00(

                   .a(a0),.b(b0),

                   .ci(SW[4]),

                   .co(co0),

                   .s(s0)

                   );

                  

add4bit a11(

                   .a(a1),.b(b1),

                   .ci(SW[5]),

                   .co(co1),

                   .s(s1)

                   );                

 

assign  LEDR[5] = co1;

assign  LEDR[4] = co0;

 

seg7 H0(.data_in(s0),.data_out(HEX0)); 

seg7 H1(.data_in(s1),.data_out(HEX1));

seg7 H2(.data_in(a0),.data_out(HEX2)); 

seg7 H3(.data_in(b0),.data_out(HEX3));

seg7 H4(.data_in(a1),.data_out(HEX4));

seg7 H5(.data_in(b1),.data_out(HEX5));                            

 

endmodule

 

  1. 在DE10-Lite实验板上下载验证

可以使用LEDR和剩余的HEX来表示电路的重要信号,下载验证电路的功能。

 

图 2  电路结构

 

References:

1.DIGITAL SYSTEMS II Spring 2021

Department of Electrical and Computer Engineering

University of California, Davis

Lab 2: An Adder-Based Design

 

 

Written by YongfengXie

2022/06/17  Written

 

posted on 2022-06-17 11:10  yf.x  阅读(163)  评论(0编辑  收藏  举报

导航