数电实验二:简易计算器(设计报告)

更新时间:2024-05-23 13:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数电实验2设计报告

实验名称:简易计算器 实验目的:

1.熟练掌握综合逻辑电路的设计方法及调试方法 2.掌握Verilog HDL数字系统设计方法

3.熟悉PLD实验箱的结构和使用及QuartusII软件的基本操作

4.掌握采用Quartus II软件和实验箱设计实现逻辑电路的基本过程

设计任务及要求:

利用LPM例化元件和适当的中小规模时序、组合逻辑电路设计一个4位简易计算器,实现2个4位二进制数的加、减、乘、除运算,完成主要模块的波形仿真,并将设计下载到实验箱进行功能测试。

要求:

1、 用8个开关分别作为2个4位输入数据 2、 运算结果用数码管显示

电路设计过程:

1、 设定加、减、乘、除四个LPM例化元件

加法器:2个四位二进制输入(加数、被加数),1个4位二进制输出(和) lpm_add_sub0

dataa[3..0]A result[3..0]A+Bdatab[3..0] Binst

减法器:2个四位二进制输入(减数、被减数),1个4位二进制输出(差) lpm_add_sub1

dataa[3..0]A result[3..0]A-B datab[3..0]Binst6

乘法器:2个四位二进制输入(乘数、被乘数),1个8位二进制输出(积) lpm_mult0

dataa[3..0] result[7..0]Unsigned datab[3..0]multiplicationinst19

除法器:2个四位二进制输入(除数、被除数),2个4位二进制输出(分别代表商和余数) lpm_divide0numer[3..0]quotient[3..0]

denom[3..0]remain[3..0]

inst27Numer is UNSIGNEDDenom is UNSIGNED2、 加入组合逻辑电路和4选一数据选择器,控制进行运算的种类 (1)组合逻辑电路输入:

kx4ky4INPUTVCCINPUTVCCNOTAND2inst69NOTinst50AND2NOTinst74ky5INPUTVCCNOTOR3inst75inst51AND2inst55NOTAND2inst77kx5INPUTVCCNOTinst79inst76inst52inst54kx6INPUTVCCOR3AND2inst78ky6INPUTVCCinst80功能:

为了利用矩阵键盘对计算器对输入数字的加减乘除进行控制,我们画了这个组合逻辑电路,将矩阵键盘的行管脚和列管脚分别为输入后,当(1,1)位置的按键按下,则输出端输出2位2进制数11(控制减法操作),当(2,2)位置的按键按下,则输出端输出2位2进制数10(控制加法操作),当(3,3)位置的按键按下,则输出端输出2位2进制数01(控制乘法操作),当所有按键都没有按下时,输出默认为00,即控制除法操作。

(2)4选一数据选择器功能

X1,y1为想要计算的两个4位2进制数,当S0,S1为11的时候,将X1,y1送入减法器输入端,当S0,S1为10的时候,将X1,y1送入加法器输入端,当S0,S1为01的时候,将X1,y1送入乘法器输入端,当S0,S1为00的时候,将X1,y1送入除法器输入端。此时未被选中其他LPM模块输入为零。

mux_4x[3..0]y[3..0]s0s1sub1[3..0]sub2[3..0]add1[3..0]add2[3..0]mul1[3..0]mul2[3..0]div1[3..0]div2[3..0]inst5数据选择器程序: Modulemux_4 (x,y,s0,s1,sub1,sub2,add1,add2,mul1,mul2,div1,div2); input[3:0] x,y; input s0,s1; output[3:0] sub1,sub2,add1,add2,mul1,mul2,div1,div2; reg[3:0] sub1,sub2,add1,add2,mul1,mul2,div1,div2; always @(x,y,s0,s1) if(s0) if(s1) begin sub1=x; sub2=y; add1=0; add2=0; mul1=0; mul2=0; div1=0; div2=0; end else begin add1=x; add2=y; sub1=0; sub2=0; mul1=0; mul2=0; div1=0; div2=0; end else if(s1) begin mul1=x; mul2=y; sub1=0; sub2=0; add1=0; add2=0; div1=0; div2=0; end else begin div1=x; div2=y; sub1=0; sub2=0; mul1=0; mul2=0; add1=0; add2=0; end endmodule mux_4x[3..0]sub1[3..0]y[3..0]sub2[3..0]s0add1[3..0]s1add2[3..0]mul1[3..0]mul2[3..0]div1[3..0]div2[3..0]inst10

3、在每个例化元件的输出结果后加上数码管编码和扫描,将结果译码为数码管显示的段位,并产生两个位选信号

VCCsaomiaox[6..0]y[6..0]clka[6..0]led0led1bianmaNOTA[3..0]LED7S[6..0]inst37

inst45 inst39

(1)数码管译码器功能:

将输入的4位2进制计算结果编译成数码管十进制显示的段位。

数码管译码器程序: modulebianma (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 ; 4'b1101: LED7S <= 7'b1011110 ; 4'b1110: LED7S <= 7'b1111001 ; 4'b1111: LED7S <= 7'b1110001 ; endcase bianmaend A[3..0]LED7S[6..0]endmodule inst28(2)扫描模块功能:

用以轮流产生两个数码管的位选信号,当时钟信号高电平时使1管亮,当时钟信号低电平时使2管亮

扫描模块程序 modulesaomiao (x,y,a,clk,led0,led1); inputclk; input[6:0] x,y; output[6:0] a; output led0,led1; reg[6:0] a; reg led0,led1; always @(clk,x,y) if(clk) begin a=x; led0=1; led1=0; end else begin a=y; led1=1; led0=0; end endmodule saomiaox[6..0]y[6..0]clkinst42a[6..0]led0led14、将加、减、乘、除译码后的结果接入4选一数据选择器,同输入端一样,控制计算类型得数的输出。

fen_4s0s1out1[6..0]out2[6..0]out3[6..0]out4[6..0]x[6..0]OUTPUTout4[6..0]inst13功能:根据输入端编码器输出s0,s1两位控制信号00、01、10、11信号的不同,将加、减、乘、除得数的数码管显示段位分别送给输出端。当S0,S1为11的时候,将减法结果送给输出端,当S0,S1为10的时候,将加法结果送给输出端,当S0,S1为01的时候,将乘法结果送给输出端,当S0,S1为00的时候,将除法结果送给输出端。

end 第二个数据选择器程序: else module fen_4 begin (x,s0,s1,out1,out2,out3,out x=out2; 4); end output[6:0] x; else input s0,s1; if(s1) input[6:0] begin out1,out2,out3,out4; x=out3; reg[6:0] x; end always else @(out1,out2,out3,out4,s0,begin s1) x=out4; if(s0) end if(s1) endmodule begin x=out1; 3、 同时,把加、减、乘、除得数显示部分产生的2位位选信号用或门连到一起,共同位选数码管。

OR4OUTPUTLED3inst5OR4OUTPUTLED2设计原理图: inst8

74290SET9ASET9BCLRACLRBCLKACLKBQAQBQCQDinst20COUNTERinst23COUNTERinst22COUNTER74290SET9ASET9BCLRACLRBCLKACLKBQAQBQCQDQBQCQDQBQCQDQBQCQDinst24COUNTER74290SET9ASET9BCLRACLRBCLKACLKBQAQAQASET9ASET9BCLRACLRBCLKACLKBSET9ASET9BCLRACLRBCLKACLKB742907429074290SET9ASET9BCLRACLRBCLKACLKBQAQBQCQDinst25COUNTERclk1INPUTVCCOR3OUTPUTLED0inst21COUNTERinst18OR3lpm_add_sub1dataa[3..0]datab[3..0]kx1ky1NOTINPUTVCCINPUTVCCNOTAND2OUTPUTLED1bianmasaomiaoAA-BBinst6inst17result[3..0]NOTA[3..0]LED7S[6..0]inst29x[6..0]y[6..0]clkinst28inst30a[6..0]led0led1inst42inst65inst46mux_4NOTinst66ky2OR3AND2INPUTVCCNOTAND2lpm_add_sub0sub2[3..0]add1[3..0]add2[3..0]mul1[3..0]mul2[3..0]div1[3..0]div2[3..0]inst67inst47AND2inst53s0NOTy[0..3]y[3..0]s1inst70inst72kx2inst68inst48INPUTVCCNOTdataa[3..0]Aresult[3..0]A+Bdatab[3..0]BinstbianmaA[3..0]LED7S[6..0]NOTx[0..3]x[3..0]INPUTVCCINPUTVCCsub1[3..0]NOTinst49inst34inst35bianmamul[7..4]kx3OR3INPUTVCCAND2saomiaofen_4lpm_mult0inst71inst5A[3..0]LED7S[6..0]x[6..0]a[6..0]s0x[6..0]OUTPUTout[6..0]ky3INPUTVCCinst73dataa[3..0]result[7..0]mul[7..0]datab[3..0]inst19Unsignedmultiplicationmul[3..0]inst36bianmay[6..0]led0s1clkled1out1[6..0]inst32out2[6..0]NOTinst43out3[6..0]A[3..0]LED7S[6..0]bianmainst45lpm_divide0numer[3..0]quotient[3..0]denom[3..0]remain[3..0]Numer is UNSIGNEDDenom is UNSIGNEDinst27inst40A[3..0]LED7S[6..0]NOTinst38inst31saomiaobianmaNOTx[6..0]a[6..0]A[3..0]LED7S[6..0]inst33y[6..0]clkinst44led0led1inst41 管脚分配:

本文来源:https://www.bwwdw.com/article/m757.html

Top