毕业设计答辩基于可编程器件的简易计算器设计学号:1013011学生姓名:杨佳运专业班级:自动化一班指导老师:陈捷研究的基本内容基本内容:以XILINX公司的ISE8.1I开发软件为平台,完成一个能进行四则运算的简易计算器。用VHDL程序编写加、减、乘、除运算电路、键盘输入电路、数码管显示电路等模块的代码,并对各模块代码进行软件仿真、调试,最终将完整设计的电路代码下载至可编程器件电路。通过可编程器件与外围输入输出设备验证设计结果。VHDL语言VHDL全名Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL语言主要具有以下优点:VHDL语言功能强大,设计方式多样;VHDL语言具有强大的硬件描述能力;VHDL语言具有很强的移植能力;VHDL语言的设计描述与器件无关;VHDL语言程序易于共享和复用。简易计算器的原理图核心模块:扫描模块和计算模块输入部分存储部分计算部分显示部分FPGA主要程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityclkdivisport(clk:instd_logic;clkout:outstd_logic);endclkdiv;architectureoneofclkdivissignalcnt:integerrange0to2000:=0;--10_000_000/1_000=1000beginprocess(clk)beginifclk'eventandclk='1'thenif(cnt20000)thencnt=0;elsecnt=cnt+1;endif;endif;endprocess;clkout='1'whencnt=0else'0';Endone;扫描频率:500HZ分频模块entityscan_keyisport(clk:instd_logic;rst_n:instd_logic;DE1,DE2,DE3:outstd_logic;行扫x0,x1,x2:instd_logic;列扫en:outstd_logic;按键data:outstd_logic_vector(3downto0));数据….beginprocess(clk,rst_n)begin………DE1=cnt(0);选择数码管DE2=cnt(1);DE3=cnt(2);process(clk,rst_n)beginif(rst_n='0')then点亮数码管(计算后的)键盘模块按下时间约为:10ms时钟:500hz约为2ms可以抗拒一定抖动libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitysave_a_bisport(clk,rst_n:instd_logic;en:instd_logic;a_b:instd_logic;data_in:instd_logic_vector(3downto0);a,b:outstd_logic_vector(11downto0));endsave_a_b;architectureoneofsave_a_bissignalcnt_a,cnt_b:std_logic_vector(11downto0):=x123;beginprocess(clk,rst_n)beginif(rst_n='0')thencnt_a=x000;cnt_b=x000;elsifclk'eventandclk='0'thenif(en='1'anda_b='1')thencnt_a=cnt_a(7downto0)&data_in;elsif(en='1'anda_b='0')thencnt_b=cnt_b(7downto0)&data_in;endif;endif;endprocess;a=cnt_a;b=cnt_b;endone;储存模块abcdefg译码模块seg=0111111WHENd=0ELSE0000110WHENd=1ELSE1011011WHENd=2ELSE1001111WHENd=3ELSE1100110WHENd=4ELSE1101101WHENd=5ELSE1111101WHENd=6ELSE0000111WHENd=7ELSE1111111WHENd=8ELSE1101111WHENd=9ELSE0000000;ENDbehave;计算模块beginifclk'eventandclk='1'thencasestateiswhenidle=state=start;whenstart=state=solve;q6=0;q5=0;q4=0;q3=0;q2=0;q1=0;whensolve=ifzz=0thenstate=save;elsifzz=100000thenzz=zz-100000;q6=q6+1;elsifzz=10000thenzz=zz-10000;q5=q5+1;读数模块begind=a1+a2*10+a3*100;c=b1+b2*10+b3*100;a=conv_std_logic_vector(d,10);b=conv_std_logic_vector(c,10);inst1:divportmap(clk,a,b,c_r--remainder:OUTstd_logic_VECTOR(9downto0);--rfd:OUTstd_logic);y=conv_integer(c_r);x=c+dwhenset=0else选择加减乘除c-dwhenset=1elsec*dwhenset=2elsey;SW2SW3加法减法乘法除法00100100输入A=222B=111A=222B=111硬件验证接通SW8断开SW2SW3显示A+B=333硬件验证接通SW8接通SW2断开SW3显示A-B=111硬件验证接通SW8接通SW3断开SW2显示A*B=24642硬件验证接通SW8接通SW2SW3显示A/B=2硬件验证