实验2 基于加法器的设计
实验2 基于加法器的设计
- 设计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
- 组合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
- 顶层模块设计
用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
- 在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