实验五_ALU的VHDL设计
vhdl课程设计实验报告
湖南科技大学信息与电气工程学院《课程设计报告》题目:电子技术课程设计报告专业:通信工程班级:一班姓名:何家乐学号: 1004040126指导教师:罗朝辉任务书题目《电子技术》课程设计时间安排课程设计时间为10天(2周)。
(1)调研、查资料1天。
(2)总体方案设计2 天。
(3)电路设计2天(画原理图,参数计算)。
(4)实验室完成相应电路的验证。
3天(5)撰写设计说明书 1 天。
(6)验收1 天。
目的:训练学生综合运用学过的电子技术原理的基础知识,独立进行查找资料、选择方案、设计电路、撰写报告,进一步加深对电子电路基本理论的理解,提高运用基本技能的能力,为今后的学习和工作打下坚实的基础。
要求:(1)能正确设计电路,画出线路图,分析电路原理。
(2)按时参加课程设计指导,定期汇报课程设计进展情况。
(3)广泛收集相关技术资料。
(4)独立思考,刻苦钻研,严禁抄袭。
(5)按时完成课程设计任务,认真、正确地书写课程设计报告。
(6)培养实事求是、严谨的工作态度和认真的工作作风。
总体方案实现:(1)明确设计任务,对所要设计的任务进行具体分析,充分了解电路性能、指标内容及要求。
(2)制定设计方案。
(3)迸行具体设计:单元电路的设计;参数计算;器件选择;绘制电路原理图。
(4)撰写课程设计报告(说明书):课程设计报告是对设计全过程的系统总结,也是培养综合科研素质的一个重要环节。
指导教师评语:评分等级:()指导教师签名:课程设计报告1.课题名称:RGB LED Control 原理图及PCB设计2.设计任务及要求⑴任务:完成RGB LED control 的设计,并画出原理图及其PCB设计。
⑵要求:①能正确设计电路,画出线路图,分析电路原理。
②按时参加课程设计指导,定期汇报课程设计进展情况。
③广泛收集相关技术资料。
④独立思考,刻苦钻研,严禁抄袭。
⑤按时完成课程设计任务,认真、正确地书写课程设计报告。
⑥培养实事求是、严谨的工作态度和认真的工作作风。
ALU
END PROCESS [进程名];
例 利用PROCESS语句设计与非门电路。
nandx: PROCESS (a, b) BEGIN y<=a NAND b AFTER 10ns; END PROCESS nandx;
敏感信号表所标明的信号是用来启动进程的。敏感信号表中的信号无论哪
一个发生变化(如由’0’变’1’或由’1’变’0’ )都将启动该PROCESS语句。
CASE语句
CASE语句的一般格式为: CASE 条件表达式 IS
顺序描述语句
WHEN 条件表达式的值=>顺序处理语句;
WHEN 条件表达式的值=>顺序处理语句; … END CASE;
CASE语句可以用来描述总线或编码、译码的行为,其功
能是从众多不同语句的序列中选择其中之一执行之。
IF语句也具有类似的功能,但CASE语句具有比IF语句更强
通信则一边通过接口由信号传递,一边并行地同步执行。
当选择表达式的值发生变化,便启动该语句对各子句的选择值(条件) 表达式n WHEN 条件n; 进行测试对比,当发现有满足条件的子句时,就将此子句表达式的值
赋予目标信号。
3.与CASE语句相类似,该语句对子句条件选择值具有同期性(非
顺序性)。 4. 不允许有条件重叠现象,也不允许存在条件涵盖不全的情况。
顺序描述语句
例3-8译码器 LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY decode3_8 IS PORT(a,b,c : IN STD_LOGIC; g1,g2a,g2b : IN STD_LOGIC; y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END decode3_8;
vhdl设计实验报告
vhdl设计实验报告VHDL设计实验报告引言VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和验证。
本实验旨在通过设计一个简单的电路来熟悉VHDL语言的基本语法和设计流程。
一、实验背景数字电路是现代电子系统的基础,而VHDL则是描述和设计数字电路的重要工具。
VHDL可以帮助工程师们以一种形式化的语言来描述电路的功能和结构,从而实现电路的模拟和验证。
二、实验目的本实验的目的是通过使用VHDL语言设计一个简单的电路,加深对VHDL语言的理解,并掌握基本的电路设计流程。
三、实验步骤1. 确定电路功能在设计电路之前,首先需要明确电路的功能。
本实验中,我们选择设计一个4位加法器电路。
2. 设计电路结构根据电路功能的要求,设计电路的结构。
在本实验中,我们需要设计一个4位加法器,因此需要使用4个输入端口和一个输出端口。
3. 编写VHDL代码使用VHDL语言编写电路的描述代码。
在代码中,需要定义输入和输出端口的类型和位宽,并实现电路的功能。
4. 进行仿真使用仿真工具对设计的电路进行仿真,以验证电路的功能是否符合预期。
通过输入不同的测试数据,观察输出是否正确。
5. 下载到FPGA开发板将设计好的电路代码下载到FPGA开发板上进行验证。
通过连接输入信号和观察输出信号,验证电路在实际硬件上的运行情况。
四、实验结果与分析经过仿真和实际验证,我们设计的4位加法器电路在功能上符合预期。
输入不同的数据进行加法运算时,输出结果都正确。
五、实验总结通过本次实验,我们深入了解了VHDL语言的基本语法和设计流程。
通过设计一个简单的电路,我们掌握了VHDL的应用方法,并通过仿真和实际验证,加深了对电路设计的理解。
六、实验心得本实验让我对VHDL语言有了更深入的认识。
通过实际操作,我更加熟悉了VHDL的编写和仿真流程。
ALU(西南交大)VHDL
实验五注意事项1. 电路逻辑结构图按照实验指导书图绘制。
2. 逻辑功能描述按照实验指导书,可以加上功能端。
3. 实验报告程序设计部分实现的方式有两种ALU和数码显示部分都用同一个程序实现,则实验报告上用钢笔或中性笔手写程序若ALU单元用代码实现,然后生成BLOCK图,再和实验四生成的模块连接,则需要手写ALU单元的代码,并画出ALU和七段数码显示连接的BLOCK图,然后将该BLOCK图截图、打印、粘贴。
七段数码显示的代码不需要写,在实验报告中需要注明七段数码显示的代码引用实验四代码。
4. ALU单元设计注意事项:数据从D端输入,由SEL端和Wt端控制写入A或B。
当A、B数据端的数据均输入后,则可以按照功能选择端S0、S1、S2的控制,进行相关运算。
移位运算要求用运算符拼接的形式。
即'0'&A(6downto0)是八位数据A的逻辑左移。
请分清楚,逻辑右移(左移)、算术右移(左移),循环移位和有移位输入输出端的移位。
本实验仅仅涉及逻辑移位。
不要直接使用移位函数。
A、B数据输入端的变量定义为Variable类型变量LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY alu ISPORT( sel,wt,cin,s2,s1,s0,clk :IN STD_LOGIC;--sel.wt选择输入AB,s2.s1.s0选择逻辑运算,clk时钟din:IN STD_LOGIC_VECTOR(1 DOWNTO 0);--因为按键不够将输入8位2进制通过din来分别d:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输入din01时d置入低4位din10时d置入高4位dig:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--数码管位选f:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ----数码管段位cout:OUT STD_LOGIC); ---执行s2s1s0为100带进位加法时是否溢出END alu;ARCHITECTURE behave OF alu ISSIGNAL z :STD_LOGIC_VECTOR(8 DOWNTO 0); ----s2s1s0为100时带进位加法结果暂存SIGNAL s,scan :STD_LOGIC_VECTOR(2 DOWNTO 0);-- --scan是位选s是逻辑运算指令暂存SIGNAL rw :STD_LOGIC_VECTOR(1 DOWNTO 0); ----控制暂存AB信号SIGNAL seg_r,f_r,d_r :STD_LOGIC_VECTOR(7 DOWNTO 0); ---d_r,f_r输入、结果输出暂存,seg_r数码管段位暂存SIGNAL data_r :STD_LOGIC_VECTOR(3 DOWNTO 0); ----译码器输入暂存beginprocess(sel,wt,d,din)variable a,b :STD_LOGIC_VECTOR(8 DOWNTO 0);beginrw<=sel & wt;s<=s2&s1&s0;z<=a+b+cin;f<=seg_r;dig<=scan;if clk'event and clk='1' then -----数码管扫描if(scan = "001") thenscan <= "000";elsescan <= scan + 1;end if;case din is -----置入4位2进制when "01"=>d_r(3 downto 0)<=d;when "10"=>d_r(7 downto 4)<=d;when others=>null;end case;case rw is ---选择置入暂存器A或B when "10"=>a(7 downto 0):=d_r;when "01"=>b(7 downto 0):=d_r;when others=>null;end case;case s iswhen "000"=>f_r<="00000000";cout<='0';---清零when "001"=>f_r<=a(7 downto 0) and b(7 downto 0);cout<='0';---逻辑乘when "010"=>f_r<=a(7 downto 0) or b(7 downto 0);cout<='0';---逻辑加when "011"=>f_r<=a(7 downto 0) xor b(7 downto 0);cout<='0';--逻辑异或when "100"=>f_r<=z(7 downto 0);cout<=z(8);---带进位输入的算术加法when "101"=>f_r<=a(6 downto 0)&'0';cout<='0';---A左移一位when "110"=>f_r<='0'& a(7 downto 1);cout<='0';---A右移一位when others=>null;end case;case scan is ---扫描when "000" => data_r<=f_r(7 downto 4);when "001" => data_r<=f_r(3 downto 0);when others=>null;end case;case data_r is ---数码管显示when x"0" => seg_r <= x"3f";when x"1" => seg_r <= x"06";when x"2" => seg_r <= x"5b";when x"3" => seg_r <= x"4f";when x"4" => seg_r <= x"66";when x"5" => seg_r <= x"6d";when x"6" => seg_r <= x"7d";when x"7" => seg_r <= x"07";when x"8" => seg_r <= x"7f";when x"9" => seg_r <= x"6f";when x"a" => seg_r <= x"77";when x"b" => seg_r <= x"7c";when x"c" => seg_r <= x"39";when x"d" => seg_r <= x"5e";when x"e" => seg_r <= x"79";when x"f" => seg_r <= x"71";when others=>null;end case;end if;end process;end behave;K[6]时钟LED1K[9]K[10]K[11]K[12]COMCOMCOMK[7]K[8]DPGFEDCBAK[5]K[4]K[3]K[1]K[2]截图长度受限故分段截图。
(VHDL实验报告)一位半加器,全加器的设计
A
10
五、实验步骤
(一)半加器的设计
4、对设计文件进行仿真
4)编辑输入端口波形,即指定输入端口的逻辑电平变化,在波形编辑窗 口中,选择要输入波形的输入端口。以 b 端口为例,右键单击 b ,依次选 择value--clock--period,将时间改为1us。然后重复此过程将 a 的时间改 成 2us (a的周期是b的2倍),再将输入端的D0--D3选择不同的周期(一次 要有所差别)。最后选择软件的 Fie>Save进行保存。
3)加入输入、输出端口,在波形编辑器窗口左边的端口名列表 区点击鼠标右键,在弹出的右键菜单中选择 Insert Node or Bus… 命令,在弹出的 Insert Node or Bus 对话框界面中点击 Node Finder…按钮。在出现的 Node Finder 界面中的 Filter 列表中选 择 点击 List,在 Nodes Found 窗口出现所有信号的名称,点击中 间的按钮则 Selected Nodes 窗口下方出现被选择的端口名称。双击 OK按钮,完成设置,回到 Insert Node or Bus 对话框,双击OK按钮 ,所有的输入、输出端口将会在端口名列表区内显示出来。
5)按默认选项,点击NEXT出现新建工程以前所有的设定信息, 再点击FINISH完成新建工程的建立。
A
7
五、实验步骤
(一)半加器的设计
2、建立文本设计文件
1)选择File--New--Device Design Files--VHDL File,点击OK按钮,打开进入文本编辑器对话框。
2)在文本编辑器中输入对应VHDL程序代码,如下图 所示:
全加器的设计采用“元件例化语句”,故需建立两个VHDL文 本编辑对话框(一个顶层文件,一个底层文件)。在相应的编辑框中 输入相应的VHDL语句,再分别以各自的实体名进行保存。注意的是顶 层文件名应必须与工程名一致。此次实验底层文件为半加器VHDL语句 ,顶层文件为全加器VHDL语句,其语句分别如下两图所示:
VHDL硬件课程设计实验报告
硬件课程设计实验报告一、全加器设计1、实验目的(1)了解四位全加器的工作原理。
(2)掌握基本组合逻辑电路的FPGA实现。
(3)熟练应用Quartus II进行FPGA开发。
2、实验原理全加器是由两个加数X i和Y i以及低位来的进位C i-1作为输入,产生本位和S i以及向高位的进位C i的逻辑电路。
它不但要完成本位二进制码X i和Y i相加,而且还要考虑到低一位进位C i-1的逻辑。
对于输入为X i、Y i和C i-1,输出为S i和C i的情况,根据二进制加法法则可以得到全加器的真值表如下表所示:全加器真值表由真值表得到S i和C i的逻辑表达式经化简后为:这仅仅是一位的二进制全加器,要完成一个四位的二进制全加器,只需要把四个级联起来即可。
i3、实验内容本实验要完成的任务是设计一个四位二进制全加器。
具体的实验过程就是利用实验系统上的拨动开关模块的K1~K4作为一个加数X输入,K5~K8作为另一个加数Y输入,用LED模块的LED1~LED8来作为结果S输出,LED亮表示输出‘1’,LED灭表示输出‘0’。
实验箱中的拨动开关、LED与FPGA的接口电路,以及拨动开关、LED 与FPGA的管脚连接在以前的实验中都做了详细说明,这里不在赘述。
4、实验现象与结果以设计的参考示例为例,当设计文件加载到目标器件后,拨动相应的拨动开关,输入两个四位的加数,则在LED灯上显示这两个数值相加的结果的二进制数。
5、实验报告(1)出不同的加数,绘仿真波形,并作说明。
(2)在这个程序的基础上设计一个八位的全加器。
(3)在这个程序的基础上,用数码管来显示相乘结果的十进制值。
(4)将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
二、七段数码显示设计1、七段显示基本原理七段显示器,在许多产品或场合上经常可见。
其内部结构是由八个发光二极管所组成,为七个笔画与一个小数点,依顺时针方向为A、B、C、D、E、F、G与DP等八组发光二极管之排列,可用以显示0~9数字及英文数A、B、C、D、E、F。
ALU的VHDL设计
-- TOPLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY ALU ISPORT(AIN1,AIN2,AIN3,AIN4,BIN1,BIN2,BIN3,BIN4,CZ,DIN1,DIN2 : IN STD_LOGIC;SUMM1,SUMM2,SUMM3,SUMM4,CO : OUT STD_LOGIC);END ENTITY ALU;ARCHITECTURE BEHAV7 OF ALU ISCOMPONENT summary1PORT(A1,A2,A3,A4,B1,B2,B3,B4,C1,K1 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4,COUT1 : OUT STD_LOGIC);END COMPONENT;COMPONENT summary2PORT(A1,A2,A3,A4,C2,K2 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4,COUT2: OUT STD_LOGIC);END COMPONENT;COMPONENT logic1PORT(A1,A2,A3,A4,B1,B2,B3,B4,C3,K3 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4 : OUT STD_LOGIC);END COMPONENT;COMPONENT logic2PORT(A1,A2,A3,A4,B1,B2,B3,B4,C4,K4 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4 : OUT STD_LOGIC);END COMPONENT;COMPONENT LogicCtrlPORT(D1,D2 : IN STD_LOGIC;K11,K22,K33,K44 : OUT STD_LOGIC);END COMPONENT;COMPONENT or4aPORT(p1,q1,r1,s1 : IN STD_LOGIC;t1 : OUT STD_LOGIC);END COMPONENT;COMPONENT or4bPORT(p2,q2,r2,s2 : IN STD_LOGIC;t2 : OUT STD_LOGIC);END COMPONENT;COMPONENT or4cPORT(p3,q3,r3,s3 : IN STD_LOGIC;t3 : OUT STD_LOGIC);END COMPONENT;COMPONENT or4dPORT(p4,q4,r4,s4 : IN STD_LOGIC;t4 : OUT STD_LOGIC);END COMPONENT;COMPONENT or2aPORT(j,k : IN STD_LOGIC;l : OUT STD_LOGIC);END COMPONENT;SIGNAL W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14, W15,W16,W17,W18,W19,W20,W21,W22 : STD_LOGIC; BEGINU1 :LogicCtrl PORT MAP (D1 => DIN1, D2 => DIN2, K11 => W1,K22 => W2, K33 => W3, K44 => W4);U2 : summary1 PORT MAP (A1 => AIN1, A2 => AIN2, A3 => AIN3,A4 => AIN4, B1 => BIN1, B2 => BIN2,B3 => BIN3, B4 => BIN4, C1 => CZ,K1 => W1, SUM1 => W5, SUM2 => W6,SUM3 => W7, SUM4 => W8, COUT1 => W9);U3 : summary2 PORT MAP (A1 => AIN1, A2 => AIN2, A3 => AIN3,A4 => AIN4, C2 => CZ, K2 => W2,SUM1 => W10, SUM2 => W11, SUM3 => W12,SUM4 => W13, COUT2 => W14);U4 : logic1 PORT MAP (A1 => AIN1, A2 => AIN2, A3 => AIN3,A4 => AIN4, B1 => BIN1, B2 => BIN2,B3 => BIN3, B4 => BIN4, C3 => CZ,K3 => W3, SUM1 => W15, SUM2 => W16,SUM3 => W17, SUM4 => W18);U5 : logic2 PORT MAP (A1 => AIN1, A2 => AIN2, A3 => AIN3,A4 => AIN4, B1 => BIN1, B2 => BIN2,B3 => BIN3, B4 => BIN4, C4 => CZ,K4 => W4, SUM1 => W19, SUM2 => W20,SUM3 => W21, SUM4 => W22);U6 : or2a PORT MAP (j => W9, k => W14, l => CO);U7 : or4a PORT MAP (p1 => W5, q1 => W10, r1 => W15, s1 => W19, t1 => SUMM1); U8 : or4b PORT MAP (p2 => W6, q2 => W11, r2 => W16, s2 => W20, t2 => SUMM2); U9 : or4c PORT MAP (p3 => W7, q3 => W12, r3 => W17, s3 => W21, t3 => SUMM3); U10 : or4d PORT MAP (p4 => W8, q4 => W13, r4 => W18, s4 => W22, t4 => SUMM4);END ARCHITECTURE BEHAV7;--4位数的与和或的实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY logic1 ISPORT(A1,A2,A3,A4,B1,B2,B3,B4,C3,K3 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4 : OUT STD_LOGIC);END ENTITY logic1;ARCHITECTURE BEHAV4 OF logic1 ISSIGNAL d11,d12,d13,d14,d1o,d21,d22,d23,d24,d2o,d31,d32,d33,d34,d3o,d41,d42,d43,d44,d4o : STD_LOGIC;BEGINPROCESS(A1,A2,A3,A4,B1,B2,B3,B4,C3,K3)BEGINd11 <= (A1 AND B1) AND C3;d12 <= ((NOT A1) AND B1) AND C3;d13 <= (A1 AND (NOT B1)) AND C3;d14 <= (A1 AND B1) AND (NOT C3);d1o <= ((d11 OR d12) OR d13) OR d14;--d21 <= (A2 AND B2) AND C3;d22 <= ((NOT A2) AND B2) AND C3;d23 <= (A2 AND (NOT B2)) AND C3;d24 <= (A2 AND B2) AND (NOT C3);d2o <= ((d21 OR d22) OR d23) OR d24;--d31 <= (A3 AND B3) AND C3;d32 <= ((NOT A3) AND B3) AND C3;d33 <= (A3 AND (NOT B3)) AND C3;d34 <= (A3 AND B3) AND (NOT C3);d3o <= ((d31 OR d32) OR d33) OR d34;--d41 <= (A4 AND B4) AND C3;d42 <= ((NOT A4) AND B4) AND C3;d43 <= (A4 AND (NOT B4)) AND C3;d44 <= (A4 AND B4) AND (NOT C3);d4o <= ((d41 OR d42) OR d43) OR d44;----SUM1 <= d1o AND K3;SUM2 <= d2o AND K3;SUM3 <= d3o AND K3;SUM4 <= d4o AND K3;END PROCESS;END ARCHITECTURE BEHAV4;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY logic2 ISPORT(A1,A2,A3,A4,B1,B2,B3,B4,C4,K4 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4 : OUT STD_LOGIC);END ENTITY logic2;ARCHITECTURE BEHAV5 OF logic2 ISBEGINPROCESS(A1,A2,A3,A4,B1,B2,B3,B4,C4,K4)BEGINSUM1 <= (A1 XOR ((NOT B1) NAND C4)) AND K4;SUM2 <= (A2 XOR ((NOT B2) NAND C4)) AND K4;SUM3 <= (A3 XOR ((NOT B3) NAND C4)) AND K4;SUM4 <= (A4 XOR ((NOT B4) NAND C4)) AND K4;END PROCESS;END ARCHITECTURE BEHAV5;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY LogicCtrl ISPORT(D1,D2 : IN STD_LOGIC;K11,K22,K33,K44 : OUT STD_LOGIC);END ENTITY LogicCtrl;ARCHITECTURE BEHAV6 OF LogicCtrl ISBEGINPROCESS(D1,D2)BEGINK11 <= (NOT D2) AND (NOT D1);K22 <= (NOT D2) AND D1;K33 <= D2 AND (NOT D1);K44 <= D1 AND D2;END PROCESS;END ARCHITECTURE BEHAV6;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2a ISPORT(j,k : IN STD_LOGIC;l : OUT STD_LOGIC);END ENTITY or2a;ARCHITECTURE one OF or2a ISBEGINl <= j OR k;END ARCHITECTURE one;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or4d ISPORT(p4,q4,r4,s4 : IN STD_LOGIC;t4 : OUT STD_LOGIC);END ENTITY or4d;ARCHITECTURE ONE OF or4d ISBEGINt4 <= (p4 OR q4) OR (r4 OR s4); END ARCHITECTURE ONE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY summary1 ISPORT(A1,A2,A3,A4,B1,B2,B3,B4,C1,K1 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4,COUT1 : OUT STD_LOGIC);END ENTITY summary1;ARCHITECTURE BEHAV1 OF summary1 ISBEGINPROCESS(A1,A2,A3,A4,B1,B2,B3,B4,C1,K1)BEGINSUM1 <= ((A1 XOR (B1 XOR C1))XOR C1) AND K1;SUM2 <= ((A2 XOR (B2 XOR C1))XOR ((A1 AND (B1 XOR C1))OR((A1 OR (B1 XOR C1))AND C1))) AND K1;SUM3 <= ((A3 XOR (B3 XOR C1)) XOR ((A2 AND (B2 XOR C1))OR((A2 OR (B2 XOR C1))AND A1 AND (B1 XOR C1))OR ((A2 OR (B2 XOR C1))AND(A1 OR (B1 XOR C1))AND C1))) AND K1;SUM4 <= ((A4 XOR (B4 XOR C1)) XOR ((A3 AND (B3 XOR C1))OR((A3 OR (B3 XOR C1))AND A2 AND (B2 XOR C1))OR((A3 OR (B3 XOR C1))AND(A2 OR (B2 XOR C1))AND A1 AND (B1 XOR C1)) OR((A3 OR (B3 XORC1))AND(A2 OR (B2 XOR C1))AND(A1 OR (B1 XOR C1))AND C1))) AND K1;COUT1 <= ((((A4 XOR (B4 XOR C1))AND(A3 XOR (B3 XOR C1))AND(A2 XOR (B2 XOR C1))AND(A1 XOR (B1 XOR C1))AND C1) OR((A4 XOR (B4 XOR C1))AND(A3 XOR (B3 XOR C1))AND(A2 XOR (B2 XOR C1))AND A1 AND (B1 XOR C1)) OR((A4 XOR (B4 XOR C1))AND(A3 XOR (B3 XOR C1))AND A2 AND (B2 XOR C1)) OR ((A4 XOR (B4 XOR C1))AND A3 AND (B3 XOR C1)) OR (A4 AND (B4 XOR C1))) XOR C1) AND K1;END PROCESS;END ARCHITECTURE BEHAV1;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY summary2 ISPORT(A1,A2,A3,A4,C2,K2 : IN STD_LOGIC;SUM1,SUM2,SUM3,SUM4,COUT2: OUT STD_LOGIC);END ENTITY summary2;ARCHITECTURE BEHAV2 OF summary2 ISBEGINPROCESS(A1,A2,A3,A4,C2,K2)BEGINSUM1 <= (NOT A1) AND K2;SUM2 <= ((A2 XOR C2)XOR A1) AND K2;SUM3 <= ((A3 XOR C2) XOR ((A2 AND C2)OR((A2 OR C2)AND A1))) AND K2;SUM4 <= ((A4 XOR C2) XOR ((A3 AND C2)OR((A3 OR C2)AND A2 AND C2)OR((A3 OR C2)AND(A2 OR C2)AND A1))) AND K2;COUT2 <= ((((A4 XOR C2)AND(A3 XOR C2)AND(A2 XOR C2)AND A1) OR((A4 XOR C2)AND(A3 XOR C2)AND A2 AND C2) OR ((A4 XOR C2)AND A3 AND C2) OR (A4 AND C2)) XOR C2) AND K2;END PROCESS;END ARCHITECTURE BEHAV2;。
VHDL设计输入的操作步骤
VHDL设计输入的操作步骤按开始=>程序=>Lattice Semiconductorisp中选ispLEVER Project Navigator,会弹出如下图所示的界面。
按File=>New Project菜单建立一个新的项目,此时会弹出如下图所示的对话框。
请注意:在该对话框中的Project Type栏中,必须根据设计类型选择相应的项目的类型。
本例中,选择VHDL类型。
请在新建目录里建项目。
将该工程文件存盘为counter.syn。
双击器件项,选择正确器件ispLSI1032E-70LJ84:在ispLEVER Project Navigator主窗口中,选择Source=>New菜单。
在弹出的New Source对话框中,选择VHDL Module类型。
此时,软件会产生一个如下图所示的New VHDL Source对话框:输入文件名,实体名和结构名:在对话框的各栏中,分别填入如上图所示的信息。
按OK钮后,进入文本编辑器-Text Editor编辑VHDL文件。
在Text Editor中输入如下的VHDL设计,并存盘。
此时,在ispLEVER Project Navigator主窗口左侧的源程序区中,counter.vhd文件被自动调入。
在主窗口右侧的进程区中,双击SynplifySynthesize VHDL File,即对VHDL设计进行编译、综合。
在通过VHDL综合过程后,可对设计进行功能和时序仿真。
在ispLEVER Project Navigator主窗口中按Source=>New菜单,产生并编辑如下的测试向量文件demo.abv:在ispLEVER Project Navigator主窗口中选中左侧的counter.abv文件,双击右侧的Functional Simulation栏,进行功能仿真。
在Waveform Viewer窗口中观测信号clk,clrn和Q3,Q2,Q1,Q0,观察波形。
VHDL实验(完整版)
实验一 Quartus II软件使用与十进制计数器一、实验目的熟悉使用Quartus II软件二、实验内容安装Quartus II软件并成功注册、使用Quartus II软件建立工程并完成十进制计数器三、实验仪器、设备计算机、Quartus II软件四、实验步骤1.打开安装文件位于…quartusII6.0\disk1\install.exe,根据提示进行下一步操作,在弹出框中选择第一个选项,install Quartus II and Related Software。
Quartus II的安装步骤1接下来的安装中选择下一步,到下图选择界面。
只勾选安装Quartus II 6.0即可。
Quartus II的安装步骤22.完成安装步骤2后选择下一步至下图所示,选择完全安装complete,再继续点击下一步至安装开始。
完全安装Quartus II软件软件安装途中出现如下图所示情况时,选择安装文件中的…disk2\disk2\quartus,然后选择确定——OK继续安装直到结束。
安装过程中换disk2路径Quartus II软件的安装至此结束,此安装步骤WINXP/WIN 7均有效,WIN8若有问题,请修改兼容权限。
3.软件注册。
软件安装结束后打开Quartus II软件将出现下图所示情况,这是没有注册的提醒,我们必须先进行注册才能建立工程文件,若大家忽略了这个提示窗口,直接进行工程建立等工作,任何仿真图和编译功能都无法正常使用,等于白费功夫浪费时间,还要重新做,非常影响学习兴趣和情绪。
(由于软件注册是绑定MAC物理地址,所以每台机器的license 是完全不一样的,实验室的电脑已经安装好了Quartus II软件,但是没有注册,所以做实验的时候一点要先注册,不然就白做了)Quartus II软件提示未注册弹窗注册方法,打开quiic7.1 lisence 生成器文件夹中的keymaker.exe,在弹出的窗口中点击Make License,在文件夹中就会出现和本台机器相匹配的license.dat。
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告VHDL实验报告班级:电子学号:姓名:2014/5/23Experiment 1 两位二进制数的大小比较器一、实验目的:(1)熟悉QuartusII的开发环境、熟练掌握编程开发流程。
(2)学习VHDL的基本语法及编程设计。
二、实验内容:数值比较器设计三、实验要求:(1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程;2)设计输入使用插入语言模板(Insert Template); ((3)在QuartusII开发环境下对设计程序进行时序仿真,将生成的配置文件下载到实验板,进行最终的实物测试验证。
四、实验原理:根据两位二进制数的大小得到对应的比较结果,其电路示意图及电路特性表为: 比较器特性表A B In_s In_l In_e 比较器电路示意图YsYe YlY A > B × × × 0 0 1A[3:0] Yl Number B[3:0] A < B × × × 1 0 0 Ye A = B 0 1 0 0 0 1 In_sYs Comparer In_l A = B 1 0 0 1 0 0 In_e A = B 0 0 1 0 1 0 A = B 0 0 0 × × × A = B × 1 1 × × × A = B 1 × 1 × × × A = B 1 1 × × × ×五、程序编写、调试及仿真(芯片型号:MAX?系列EPM1270T144C5) (1)程序编写:library ieee;use ieee.std_logic_1164.all;2entity Vhdl1 isport(a,b:in std_logic_vector(3 downto 0);ins,inl,ine: in std_logic;ys,ye,yl: out std_logic);end Vhdl1;architecture one of Vhdl1 issignal temps,tempe:std_logic; beginys<=temps;ye<=tempe;yl<=temps nor tempe;process(a,b,ine)beginif (a=b and ine='1')thentempe<='1';elsetempe<='0';end if;end process;process(a,b,ins)beginif(a<b) thentemps<='1';elsif(a=b and ins='1') then temps<='1';elsetemps<='0';end if;end process;end one;(2)功能仿真:3(3)芯片引脚设定:(4)适配下载结果六、结果分析本实验实现了两位二进制数的比较。
《VHDL程序设计》实验指导书2010.9.5
《VHDL程序设计》实验指导书实验1 Quartus II设计平台的使用实验序号:1 实验名称:QuartusII设计平台的使用适用专业:电子信息工程、通信工程学时数:4学时一、实验目的(1)熟悉Quartus II设计平台的界面(2)掌握Quartus II设计平台的常用功能(3)掌握Quartus II开发流程二、实验要求(1)调试程序要记录调试过程中出现的问题及解决办法;(2)给出每个问题的算法或画出流程图;(3)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验;(4)做完实验后给出本实验的实验报告。
三、实验设备、环境至少PIII计算机,装有Quartus II 6.0软件四、实验步骤及内容(一)教师演示讲解Quartus II的使用1、教师演示Quartus II的原理图设计过程。
2、教师演示Quartus II的VHDL操作步骤,包括设计输入、编译处理、验证(包括功能仿真、时序仿真)和器件编程。
(二)学生按照原理图设计步骤设计一个半加器并仿真1.操作步骤:(1)输入源文件,选择菜单”File”\”New”,弹出“New”对话框,并选择“Block Diagram/Schematic File”,出现原理图文件的编辑界面。
(2)双击工作区域,出现“Symbol”界面,展开界面左边的Libraries对话框内的primitives等文件夹,并查找与门and2、异或门xor、输入信号线Input、输出信号线Output,并把它们依次拉入原理图编辑区,如图所示(参考)(3)连接各器件,并保存为h_add.bdf文件(4)创建工程:点击“file/new project wizard”菜单选项,并按其提供的步骤创建工程(5)选择目标器件:点击“assignments/settings”菜单选项,选择要编程的芯片型号以及配置方式(6)全过程编译:选择“processing/start compilation”或点击工具栏快捷按钮开始全过程编译(此处的全过程编译包括了分析与综合、适配、装配文件、定时分析、网表文件提取等过程)(7)仿真第一步:选择“file/new”,并点击“other files”的“vector waveform file”,进入波形编辑界面(8)仿真第二步:选择“view/utility windows”的“Node finder”选项,在“filter”框内选择“pins:all”,点击List按钮,出现本设计项目中的所有端口,选择要仿真的端口并拖入波形编辑窗口(9)仿真第三步:编辑输入信号波形(注意观察教师现场演示),并可通过“edit”菜单的“end time”选项设置仿真时间(10)仿真第四步:设置仿真模式,点击“assignments/settings”菜单选项,寻找“filter settings”中的“simulator”选项,选择功能仿真(Functional)或时序仿真(Timing) (11)观察仿真结果,选择“processing/start simulation”或点击快捷按钮,仿真结束后观察并分析输出的仿真波形,检验设计是否正确,如不正确,需查错并修改,重复以上步骤直到仿真波形符合要求。
VHDL语言实验指导书
浙江工商大学计算机与信息工程学院 开放实验项目实验指导书
基于 VHDL 的数字逻辑电路设计
指导教师:
傅均
开放地点: 信息楼 119 室
图 1. HST 实验板及包含硬件资源
《基于 VHDL 的数字逻辑电路设计》实验指导书 傅均 V3.0
第2页
图 2. EPM240T100C5 芯片引脚和对应板上资源连接
注意 1: CPLD 的第 9、13、31、45、59、63、80、94 引脚已经接 Vcc 3V;CPLD 的第 10、11、32、46、60、65、79、93 引脚已经接 GND 0V。CPLD 的第 22、 23、24、25 引脚已经用于 JTAG 下载器连接。第 64 引脚已经设置为时钟输入 GCLK3(11MHz)。
开放时间: 第 11-15 周三 10-12 节
电子邮箱: junfu@mail.
2012 年 4 月-6 月 版本 V3.0
目录
1、实验说明和注意事项………………………………………………...(1) 2、实验设备与资源介绍………………………………………………...(1) 3、实验内容与要求…………………………………………………...…(4)
实验一 常用组合逻辑电路设计
一、 实验目的
1 .初步掌握 VHDL 语言的基本单元及其构成。 2 .了解 VHDL 中的顺序语句和并行语句,掌握 process 语句、信号赋值语句等。 3 .学习 Quartus II 9.1 软件的基本操作,掌握文本输入法设计数字电路的过程。 4 .学会编写 3-8 译码器、数值比较器等简单的常用组合逻辑电路。
vhdl_ALU
基于vhdl 实现的简单ALU 模块使用4位七段数码管输出4位16进制数s分别选择不同功能,包括逻辑加,逻辑乘,算术加,算术乘,左移右移,与或library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity mytest_5 isport( clk,cin,sel,Wt:in std_logic;s:in std_logic_vector( 2 downto 0);set_num:in std_logic_vector( 3 downto 0);set_ch:in std_logic_vector( 1 downto 0);data :out std_logic_vector( 6 downto 0);cout:out std_logic;sel_out:out std_logic_vector( 2 downto 0));end mytest_5;architecture behave of mytest_5 issignal num1,num2,num3,num4: std_logic_vector (3 downto 0);begina:process( clk )variable cc: integer range 0 to 3:=0;variable num : std_logic_vector (3 downto 0);beginif( clk = '0' ) thencase cc iswhen 0 => num := num1;sel_out <= "011";cc:=1;when 1 => num := num2;sel_out <= "010";cc:=2;when 2 => num := num3;sel_out <= "001";cc:=3;when 3 => num := num4;sel_out <= "000";cc:=0;end case;case num iswhen "0000" => data <= "0111111";when "0001" => data <= "0000110";when "0010" => data <= "1011011";when "0011" => data <= "1001111";when "0100" => data <= "1100110";when "0101" => data <= "1101101";when "0110" => data <= "1111101";when "0111" => data <= "0000111";when "1000" => data <= "1111111";when "1001" => data <= "1101111";when "1010" => data <= "1110111";when "1011" => data <= "1111100";when "1100" => data <= "0111001";when "1101" => data <= "1011110";when "1110" => data <= "1111001";when "1111" => data <= "1110001";end case;end if;end process;b:process( clk )variable a,b,f:std_logic_vector( 16 downto 0 );beginif clk = '0' thenif Wt = '1' thenCASE set_ch ISwhen "00" => num1<=set_num;when "01" => num2<=set_num;when "10" => num3<=set_num;when "11" => num4<=set_num;end case;if sel = '0' thena(3 downto 0):=num1;a(7 downto 4):=num2;a(11 downto 8):=num3;a(15 downto 12):=num4;elsif sel = '1' thenb(3 downto 0):=num1;b(7 downto 4):=num2;b(11 downto 8):=num3;b(15 downto 12):=num4;end if;elsif Wt = '0' thencout <= '0';case s iswhen "000"=> f := "00000000000000000";when "001"=> f := a and b;when "010"=> f := a or b;when "011"=> f := a xor b;when "100"=> f := a + b + cin;cout <= f(16);when "101"=> f := a(15 downto 0) & '0';when "110"=> f := "00" & a(15 downto 1);when "111"=> null;end case;num1<= f(3 downto 0);num2<= f(7 downto 4);num3<= f(11 downto 8);num4<= f(15 downto 12);end if;end if;end process;end behave;。
实验05_串入并出移位寄存器的VHDL设计1
《VHDL设计》实验报告班级:学号:姓名:成绩:实验五串入/并出移位寄存器的VHDL设计一、实验目的1、通过本实验的设计,掌握基本移位寄存器的VHDL设计方法。
2、通过本实验的设计,进一步掌握Testbench的编写和SignalTap II的使用。
3、进一步掌握FPGA设计的全过程和相关软件的使用。
二、实验内容在数字电路中,用来存放二进制数据或代码的电路称为寄存器(Register)。
寄存器是由具有存储功能的触发器组合起来构成的。
一个触发器可以存储一位二进制代码,存放N位二进制代码的寄存器,需用N个触发器来构成。
寄存器按功能可分为:基本寄存器和移位寄存器(Shift Register)。
移位寄存器中的数据可以在移位脉冲作用下一次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,串行输入、并行输出,十分灵活,用途也很广。
1、基本串入/并出移位寄存器【原理】在这里我们通过一个4位串入/并出移位寄存器设计过程来介绍如何设计串入/并出移位寄存器。
所谓的串入/并出移位寄存器,即输入的数据是一个接着一个依序地进入,输出时则一起送出。
时序表达如图所示。
4位串入/并出移位寄存器仿真波形图上图中输入的数据为“1010”、“0111”两组4位数据。
图中可以看出:在第1个CLK上升沿到来时获得D_IN 的值‘1’(输出“0001”);第2个CLK上升沿到来时获得D_IN的值‘0’(输出“0010”);第3个CLK上升沿到来时获得D_IN的值‘1’(输出“0101”);第4个CLK上升沿到来时获得D_IN的值‘0’,同时输出寄存器值为“1010”(十六进制A)。
因输入的数据是每次一位依序进入,故输入、输出信号之间有4个CLK时间的延迟。
【要求】用VHDL描述该基本串入/并出移位寄存器,并行输出数据为8位。
并完成综合、仿真、下载。
用拨码开关SW1作为D_IN输入,用LED DD1~DD8作为输出D_OUT,实现移位寄存器功能。
毕业设计55UART电路的VHDL设计与实现
毕业设计55UART电路的VHDL设计与实现UART(通用异步收发器)是一种常用的串行通信协议,用于在计算机系统中实现串口通信。
它能够将数据点对点传输,提供可靠的数据传输能力。
在本文中,将介绍UART电路的VHDL设计与实现。
UART电路的VHDL设计主要包括两个核心模块:发送模块和接收模块。
发送模块负责将输入的数据转换为UART协议格式,并通过串行线路发送出去。
接收模块负责接收串行线路上的数据,并将其转换为并行数据输出。
首先,我们先设计发送模块。
发送模块需要实现将输入数据转换为UART协议格式的功能。
UART协议中,一个数据帧由起始位、数据位、校验位和停止位组成。
起始位的值为低电平,标志着数据帧的开始。
数据位表示传输的数据本身,可以是5、6、7或8位。
校验位用于校验数据的正确性,可以是奇校验、偶校验或无校验。
停止位表示数据帧的结束,其值为高电平。
发送模块的VHDL代码如下:```vhdlentity uart_tx isgenericDATA_BITS : integer := 8;PARITY : string := "none"; -- "none", "odd", "even"STOP_BITS : integer := 1portclk : in std_logic;reset : in std_logic;tx_enable : in std_logic;tx_data : in std_logic_vector(DATA_BITS-1 downto 0);tx_out : out std_logicend entity uart_tx;architecture behavioral of uart_tx issignal bit_counter : integer range 0 toDATA_BITS+1+STOP_BITS;signal tx_reg : std_logic_vector(DATA_BITS+1+STOP_BITS-1 downto 0);beginprocess(clk)beginif rising_edge(clk) thenif reset = '1' thenbit_counter <= 0;tx_reg <= (DATA_BITS+1+STOP_BITS) downto 0 => '1';tx_out <= '1';elseif bit_counter = 0 then -- Start bitif tx_enable = '1' thentx_reg <= '0' & tx_data & ('0' when PARITY = "none" else ('0' when PARITY = "odd" else '1')) & '1';bit_counter <= bit_counter + 1;tx_out <= tx_reg(bit_counter);end if;elsif bit_counter <= DATA_BITS+1+STOP_BITS then -- Data and Stop bitsbit_counter <= bit_counter + 1;tx_out <= tx_reg(bit_counter);elsebit_counter <= 0;tx_out <= '1';end if;end if;end if;end process;end architecture behavioral;```接下来是接收模块的VHDL代码:```vhdlentity uart_rx isgenericDATA_BITS : integer := 8;PARITY : string := "none"; -- "none", "odd", "even"STOP_BITS : integer := 1portclk : in std_logic;reset : in std_logic;rx_in : in std_logic;rx_data : out std_logic_vector(DATA_BITS-1 downto 0);rx_valid : out std_logicend entity uart_rx;architecture behavioral of uart_rx issignal bit_counter : integer range 0 toDATA_BITS+1+STOP_BITS;signal rx_reg : std_logic_vector(DATA_BITS+1+STOP_BITS-1 downto 0);beginprocess(clk)beginif rising_edge(clk) thenif reset = '1' thenbit_counter <= 0;rx_reg <= (DATA_BITS+1+STOP_BITS) downto 0 => '1';rx_data <= (DATA_BITS-1 downto 0) => '0';rx_valid <= '0';elseif bit_counter = 0 then -- Start bitrx_reg <= '1' & rx_reg(DATA_BITS+1+STOP_BITS-1 downto 1); -- Shift rightrx_reg(0) <= rx_in;bit_counter <= bit_counter + 1;elsif bit_counter <= DATA_BITS+1+STOP_BITS then -- Data and Stop bitsrx_reg <= '1' & rx_reg(DATA_BITS+1+STOP_BITS-1 downto 1); -- Shift rightrx_reg(0) <= rx_in;bit_counter <= bit_counter + 1;if bit_counter = DATA_BITS+1+STOP_BITS then -- Stop bitif parity = "none" or (parity = "odd" and rx_in = "1") or (parity = "even" and rx_in = "0") thenrx_data <= rx_reg(DATA_BITS+STOP_BITS-1 downto STOP_BITS);rx_valid <= '1';end if;end if;elsebit_counter <= 0;rx_data <= (DATA_BITS-1 downto 0) => '0';rx_valid <= '0';end if;end if;end if;end process;end architecture behavioral;```在这两个模块中,`DATA_BITS`是数据位的位数,`PARITY`是校验位的类型,可以是"none"(无校验)、"odd"(奇校验)或"even"(偶校验),`STOP_BITS`是停止位的位数。
实验:5人表决器的VHDL设计
QALL<=SUM; IF (SUM >= 3) THEN QQ<='1'; ELSE QQ<='0'; END IF; END IF; END IF; END PROCESS; END FUNG;
方案三:设计一个五人表决器。要求:对
某一个问题有三人或三人以上表示同意时, 此程序编译没通过) 表决器发出同意的信号。 (此程序编译没通过)
"10" when "11100", "10" when "11010", "10" when "10110", "10" when "01110", "10" when "11001", "10" when "10011", "10" when "01111", "10" when "10111", "10" when "11011", "10" when "11101", "10" when "11110", "10" when "11111", "01" when others; END concurrent;
方案六:设计一个五人表决器。要求:对某 设计一个五人表决器。要求:
一个问题有三人或三人以上表示同意时,表决 一个问题有三人或三人以上表示同意时, 三人或三人以上表示同意时 此程序编译通过) (此程序编译通过) 器发出同意的信号。 器发出同意的信号。
VHDL设计进阶实验与设计
BEGIN
CASE A IS
WHEN "0000" => LED7S <= "0111111" ; WHEN "0001" => LED7S <= "0000110" ;
WHEN "0010" => LED7S <= "1011011" ;
实 验 与 设 计 WHEN "0011" => LED7S <= "1001111" ;
WHEN "100" => BT <= "00010000" ; A <= 9 ;
WHEN "101" => BT <= "00100000" ; A <= 11 ;
WHEN "110" => BT <= "01000000" ; A <= 13 ;
WHEN "111" => BT <= "10000000" ; A <= 15 ;
(3) 实验内容1:说明例5-21中各语句的含义,以及该例的整体功能。在MAX+plusII上对 该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。
提示:用输入总线的方式给出输入信号仿真数据,仿真波形示例图如图5-22所示。
Y IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
WHEN "1110" => LED7S <= "1111001" ;
ALU实验报告
算术逻辑部件ALU实验报告一、实验目的(1)熟悉硬件描述语言及开发环境,了解硬件系统开发的基本过程。
(2)掌握 ALU基本设计方法和简单运算器的数据传送通路。
(3)验证 ALU的功能。
二、实验环境( 1)硬件环境:安装有 Windows7 或以上操作系统的PC,THINPAD教学计算机。
( 2)软件开发: FPGA开发工具软件 Xilinx ISE 12.3或以上。
三、实验内容(1)根据实验原理中的要求,用 VHDL语言实现一个简单的 ALU。
(2)在教学计算机 THINPAD上验证实现的 ALU的功能。
四、实验原理算术逻辑部件 ALU的主要功能是对二进制数据进行定点算术运算、逻辑运算和各种移位操作等。
算术运算包括定点加减乘除运算,逻辑运算主要用逻辑与、逻辑或、逻辑异或和逻辑非等操作。
ALU通常有两个数据输入端A 和B 输出操作数,一个数据输出端Y 以及标志位输出结果,通过输入操作码op 来确定所要进行的操作,本实验通过实现一个状态机,根据状态机状态的变化来输人操作数及操作码,并最终实现不同的运算,将结果和标志位呈现出来。
本实验中的 ALU要求实现基本的算术运算、逻辑运算、移位运算等,具体功能如下:操作码功能描述ADD A+B加法SUB A-B减法AND A and B与OR A or B或XOR A xor B异或NOT not A取非SLL A sll B逻辑左移 B 位SRL A srl B逻辑右移 B 位SRA A sra B算术右移 B 位ROL A rol B循环左移 B 位ALU的输入数据为 16 位,操作码 op 为 4 位,算术运算时数据用补码表示。
五、实验步骤本实验通过 VHDL语言实现一个比较简单的ALU模块。
(1)用 VHDL语言编写 ALU 功能代码,并用状态机对其进行控制,使其完成实验要求的操作。
操作码和操作数的输入用微型开关 SW0~SW15,计算结果的输出用数字机上的 LED灯来展示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五ALU的VHDL设计完成如表所示ALU的VHDL设计
控制信号S 运算
000
算术运算A+B;A+B+1
001 A-B ;A-B-1 010 A;A+1 011 A;A-1
100
逻辑运算AB
101 A+B
110 A⊕B
111
A
library ieee; ------库程序包调用
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity alu4 is ------实体:电路外观配置port
( a:in unsigned(3 downto 0);
b:in unsigned(3 downto 0);
cin:in std_logic;
s:in std_logic_vector(2 downto 0);
bcdout:out std_logic_vector(3 downto 0);
cout: out std_logic
);
end alu4;
architecture arch of alu4 is ------结构体:电路功能描述signal c:std_logic_vector(3 downto 0);
signal q:unsigned(3 downto 0);
begin
process(s)
begin
case s is
when "000"=> ------加法:A+B ;A+B+1
q(0)<=a(0)xor b(0)xor cin;
c(0)<=(a(0) and b(0))or (b(0)and cin)or (a(0)and cin);
gen1:for i in 1 to 3 loop
q(i)<=a(i)xor b(i)xor c(i-1);
c(i)<=( a(i) and b(i))or (b(i)and c(i-1))or (a(i)and c(i-1));
end loop;
bcdout<=q(3)&q(2)&q(1)&q(0);
cout<=c(3);
when "001"=> ------减法:A-B ;A-B-1
q(0)<=a(0)xor b(0)xor cin;
c(0)<=(not a(0) and b(0))or (b(0)and cin)or (not a(0)and cin);
gen2:for i in 1 to 3 loop
q(i)<=a(i)xor b(i)xor c(i-1);
c(i)<=(not a(i) and b(i))or (b(i)and c(i-1))or (not a(i)and c(i-1));
end loop;
bcdout<=q(3)&q(2)&q(1)&q(0);
cout<=c(3);
when "010"=>
if cin='0'then
bcdout<=a(3)&a(2)&a(1)&a(0); --传递进位Cin=0 else
bcdout<=a+1; --执行a+1
end if;
cout<='0';
when "011"=>
if cin='0'then
bcdout<=a(3)&a(2)&a(1)&a(0);--传递借位Cin=0 else
bcdout<=a-1; --执行a-1
end if;
cout<='0';
when "100"=> --逻辑与:AB
q(3)<=a(3)and b(3);
q(2)<=a(2)and b(2);
q(1)<=a(1)and b(1);
q(0)<=a(0)and b(0);
bcdout<=q(3)&q(2)&q(1)&q(0);
when "101"=> --逻辑或:A+B
q(3)<=a(3)or b(3);
q(2)<=a(2)or b(2);
q(1)<=a(1)or b(1);
q(0)<=a(0)or b(0);
bcdout<=q(3)&q(2)&q(1)&q(0);
when "110"=> --异或:A⊕B
q(3)<=a(3)xor b(3);
q(2)<=a(2)xor b(2);
q(1)<=a(1)xor b(1);
q(0)<=a(0)xor b(0);
bcdout<=q(3)&q(2)&q(1)&q(0);
when others=> --逻辑非:A
bcdout<=not a(3)& not a(2)& not a(1)& not a(0);
cout<='0';
end case;
end process;
end arch;
1、波形仿真分析
时间控制信号S 进位C 运算(A=6,B=B) 结果bcdout 0—30ns 000 0 A+B(算术加)0001即1 30—60ns 001 1 A-B-1 1010 即A 60—90ns 010 0 A 0110 即6 90—120ns 011 1 A-1 0101 即5 120—150ns 100 x AB 0010 即2 150—180ns 101 x A+B(逻辑或)1111 即F 180—210ns 110 x A⊕B 1101 即D 210—240ns 111 x
A1001 即9 2、延时仿真分析
每对连接的节点输入信号(source)和输出信号(destination)之间最小/最大传播延迟。
实验五报告格式要求:
实验名:ALU的VHDL设计一、实验目的:
ALU的VHDL设计
二、实验要求
Max+Plus II开发环境
三、源程序代码
ALU的VHDL设计:
……………
…………….
…………………
四、波形仿真
(1)波形仿真图
(2)波形仿真分析
五、延时仿真
(1)延时仿真图
(2)延时仿真分析
六、实验总结
控制信号S 运算
000
算术运算A+Badd
001 A-Bsub 010 b
a⨯mul 011 b
a÷div
100
逻辑运算ABand
101 A+Bor
110 A⊕Bxor
111
A not
when "100"=> --逻辑与:AB
q(3)<=a(3)and b(3);
q(2)<=a(2)and b(2);
q(1)<=a(1)and b(1);
q(0)<=a(0)and b(0);
bcdout<=q(3)&q(2)&q(1)&q(0);
when "101"=> --逻辑或:A+B
q(3)<=a(3)or b(3);
q(2)<=a(2)or b(2);
q(1)<=a(1)or b(1);
q(0)<=a(0)or b(0);
bcdout<=q(3)&q(2)&q(1)&q(0);
when "110"=> --异或:A⊕B
q(3)<=a(3)xor b(3);
q(2)<=a(2)xor b(2);
q(1)<=a(1)xor b(1);
q(0)<=a(0)xor b(0);
bcdout<=q(3)&q(2)&q(1)&q(0);
when others=> --逻辑非:A
bcdout<=not a(3)& not a(2)& not a(1)& not a(0);
cout<='0';。