EDA大作业 课程设计 简易计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,利用硬件描述语言Verilog HDL、EDA软件Quartus II和硬件平台Cyclone/Cyclone II FPGA进行电路系统的设计。本次实验我完成的内容是简单计算器的设计,下面我简单的进行一下原理的阐述。
设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。为了完成要求的效果显示,我先设计了一个简单的四则运算器,为了使其结果能清楚的看到,所以计算器模块和一个7段数码管模块连接。实验要求,输入分别用两位数码管显示,输出用四位数码管显示,所以用一个3—8译码器和数码管连接,通过开关控制,形成动态显示。从左向右,依次是第一位数码管显示a的高四位,第二位数码管显示a的低四位;第三位数码管显示b的高四位,第四位数码管显示b的低四位;第五位数码管到第八位数码管显示输出的结果。通过改变时钟,使其看起来像同时显示在数码管上。
设计流程如下图,分别用两个数码管表示八位二进制数,用一个case 语句表示输入数值采用哪种运算方式,分别用00,01,10,11表示加,减,乘,除。用3—8译码器选择从哪个数码管输出。
硬件流程图
输出结果 A. B 的显示
软件流程图
LED 灯接线部分显示:
中心控制 复位
编码 数码管输出
输入A 输入B 运算选择C 输出out L E D 8 L E D 7 L E D 6 L E D 5 L E D 4 L E D 3 L E D 2 L E D 1
第三章程序
简单计算器的程序如下:
module jsq9(a,b,c,Dout,count,clk,rst);
input[7:0]a,b;
input clk,rst;
input[1:0]c;
output[6:0]Dout;
output [2:0]count;
reg[6:0]Dout;
reg[2:0]count;
reg[15:0]out;
reg[6:0] LED7S1,LED7S2,LED7S3,LED7S4, LED7S5,LED7S6,LED7S7,LED7S8; DECL7S u1(.A(a[7:4]) , .LED7S(LED7S1));
DECL7S u2(.A(a[3:0]) , .LED7S(LED7S2));
DECL7S u3(.A(b[7:4]) , .LED7S(LED7S3));
DECL7S u4(.A(b[3:0]) , .LED7S(LED7S4));
DECL7S u5(.A(out[15:12]) , .LED7S(LED7S5));
DECL7S u6(.A(out[11:8]) , .LED7S(LED7S6));
DECL7S u7(.A(out[7:4]) , .LED7S(LED7S7));
DECL7S u8(.A(out[3:0]) , .LED7S(LED7S8));
reg[7:0]out1,out2;
always@(a,b,c,Dout,count,clk,rst)
case(c)
2'b00:out=a+b;
2'b01:out=a-b;
2'b10:out=a*b;
2'b11:
begin
out1=a/b;
out2=a%b;
out={out1,out2};
end
default:;
endcase
always@(posedge clk or negedge rst)
begin
if(!rst)
count<=3'b000;
else if(count==3'b111)
count<=3'b000;
else
count<=count+3'b001;
end
always@(posedge clk)
begin
case(count)
3'b000: Dout<=LED7S1;
3'b001:Dout<=LED7S2;
3'b010:Dout<=LED7S3;
3'b011:Dout<=LED7S4;
3'b100: Dout<=LED7S5;
3'b101:Dout<=LED7S6;
3'b110:Dout<=LED7S7;
3'b111:Dout<=LED7S8;
endcase
end
endmodule
module DECL7S (A, LED7S);
input [3:0] A;
output [6:0] LED7S;
reg [6:0] LED7S;
always @(A)
begin
case(A)
4'b0000 : LED7S<=7'b0111111; 4'b0001: LED7S <= 7'b0000110 ; 4'b0010: LED7S <= 7'b1011011; 4'b0011: LED7S <= 7'b1001111; 4'b0100: LED7S <= 7'b1100110 ; 4'b0101: LED7S <= 7'b1101101; 4'b0110: LED7S <= 7'b1111101 ; 4'b0111: LED7S <= 7'b0000111 ; 4'b1000: LED7S <= 7'b1111111 ; 4'b1001: LED7S <= 7'b1101111 ; 4'b1010: LED7S <= 7'b1110111 ; 4'b1011: LED7S <= 7'b1111100 ; 4'b1100: LED7S <= 7'b0111001 ;