8位ALU (quartus2设计 & 设计报告)

合集下载

QuartusII软件使用及设计流程

QuartusII软件使用及设计流程



Quartus II 设计流程
一、 设计输入
1.建立工程Project
任何一项设计都是一项工程(Project),都必须首先为 此工程建立一个放置与此工程相关的所有设计文件的文件 夹。此文件夹将被EDA软件默认为工作库(Work Library)。一般,不同的设计项目最好放在不同的文件夹 中,而同一工程的所有文件都必须放在同一文件夹中。
(2)选择元件。在原理图编辑窗中的任何一个位置上双
击鼠标的左键将跳出一个元件选择窗。
参数可设置的强函数元件库
MAX+plus库
基本逻辑元件库
基本逻辑元件库中的元件
由此输入所需要的元件名
(3)连接各元器件并命名。

在图1-39中,将光标移到input右侧,待变成十字形光标 时,按下鼠标左键(或选中工具栏中的 工具,光标自动 会变成十字形的连线状态),再将光标移动到异或门的左 侧,待连接点上出现蓝色的小方块后释放鼠标左键,即可 看到input和异或门之间有一条连线生成。 重复上面的方法将1-39图中各种符号连接起来,如图1-40 所示。
(4)第三方工 具选择。 如图1-7所示ቤተ መጻሕፍቲ ባይዱ 用户可以选择所 用到的第三方工 具,比如 ModleSim、 Synplify等。在 本例中并没有调 用第三方工具, 可以都不选.
(5)确认信息对话框。 图1-8所示。建立的工程的名称、选择的器件和 选择的第三方工具等信息,如果无误的话就可 以单击“Finish”按钮,弹出如图1-9所示的窗口, 在资源管理窗口可以看到新建的工程名称 half_add。
(1)打开建立新工程管理窗。选择菜单File→New Preject Wizard 命令,即弹出“工程设置”对话框(图1-3),以 此来建立新的工程。

在QuartusII中用原理图输入法设计8位全加器

在QuartusII中用原理图输入法设计8位全加器

VHDL与集成电路设计实验报告实验二:在QuartusII中用原理图输入法设计8位全加器姓名院系学号任课教师指导教师评阅教师实验地点实验四号楼611室实验时间2012 年11月实验目的:熟悉QuartusⅡ的VHDL文本设计过程,学习简单时序电路的设计、仿真和测试实验原理:一个8位全加器可以由8个1位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相临的高位加法器的最低进位输入信号cin相接。

而一个1位全加器可以按照6.1节的方法来完成实验内容:实验内容1:按照6.1节介绍的方法与流程,完成半加器和全加器的设计,包括原理图输入、编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个硬件符号入库。

键1、键2、键3(PIO0/1/2)分别接ain、bin、cin;发光管D2、D1(PIO9/8)分别接sum 和cout实验内容2:实验内容2,建立一个更高层次的原理图设计,利用以上获得的1位全加器构成8位全加器,并完成编译、综合、适配、仿真和硬件测试。

建议选择电路模式1(附录图3);键2、键1输入8位加数;键4、键3输入8位被加数;数码6/5显示加和;D8显示进位cout实验过程:1、先建立工程,再建立第一个半加器.bdf文件,进行元件逻辑器件选择,放置好端口器件,连接好线,改好名字2、进行编译综合。

3、再在半加器的基础上建立全加器。

注意半加器要进行包装成一个元件。

4、再在全加器的基础上建立起8位全加器。

同样要把全加器进行包装。

5、仿真分析:建立一个.vwf文件,设定好各个输入端口频率,进行仿真分析。

6、硬件测试:引脚锁定,综合,接实验箱的线,打开电源,如果没有驱动,进行驱动选择。

点击下载按钮,进行下载测试。

5、测试过程及结果:引脚锁定4个按键,按前两个按键,前两位的数码管的前两个数码管显示两个数,还有另外两个数码管6/5显示和,按另外两个键,后两位的数码管显示当前的数,结果那6/5两个数码管显示这两个数加起来的和。

数电课程设计报告Quartusll软件设计环境中利用一位全加D锁存器或者D触发器实现8位二进制加法器

数电课程设计报告Quartusll软件设计环境中利用一位全加D锁存器或者D触发器实现8位二进制加法器

数学逻辑课程设计报告一、课程设计题目和要求在Quartus ll软件设计环境中利用一位全加D锁存器或者D触发器实现8位二进制加法器,将其进行功能仿真。

二、课程设计目的课程设计是培养我们学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,数字电子技术已经成为当今计算机应用中重要的基础领域,在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握运用数字电子技术与逻辑电路的开发技术是十分重要的。

课程设计的目的与要求:1、了解基本的逻辑门电路。

2、在实际应用中学会实验元件的作用和工作方式。

3、提高自己的动手动脑能力,将在课堂上学到的知识应用到实际当中。

三、实验条件QUARTUS II 9.0软件、计算机四、实验设计思路1、打开QUARTUS II 9.0软件新建工程并打开作图界面。

2、按照实验要求搭好电路3、我们采用了一个74283的四位全加器,又根据题目的要求用一位的全加器因此只利用其中一位,输出输入端如图所示:4、之后我们又考虑到8位数据的存储与输出,因此我们重复使用了8次D触发器来得到八位的数据存储。

五、仿真和仿真结果1、在软件中绘制好电路图后,建立工程文件,经过编译后建立波形文件。

在波形文件中设置参数,时间为区域设为10ns。

下图为该电路实验在RTL viewer下的电路示意图。

2、功能仿真结果图:六、实验的不足在实验设计的过程中,由于对软件的使用和操作不是太熟练由此而导致一些问题的不断产生,电路的输入也不是规则有序的输入信号,因此只能实现以上的试验结果,初步的达到了本次课程设计的实验要求。

七、心得体会通过这次课程设计,加强了我们动手、思考和解决问题的能力。

在整个设计过程中,我们通过这个方案包括设计了一套电路原理和了解芯片的选择。

回顾起此次数字电子技术课程设计,至今我仍感慨颇多,的确,从查资料到定稿,从理论到实践,在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的接法可以行得通,但实际接上电路,总是实现不了,因此耗费在这上面的时间用去很多。

八位全加器原理图设计实验报告

八位全加器原理图设计实验报告

南通大学计算机科学与技术学院课程实验报告
课程名称:计算机组成原理年级:2012级上机日期:11月6日姓名:学号:班级:信管122
实验名称:八位全加器设计教师:陈越成绩:
上图为n个1位的全加器FA级联成的n位的行波进位加减器。

M为方式控制输入线,当M=0时,做加法运算;当M=1时,做减法运算。

图中左边还表示出单符号位法的溢出检测逻辑:当C n=C n-1时,运算无溢出;而当C n≠C n-1时,运算有溢出,经异或门产生溢出信号,0无溢出,1表示溢出。

四、内容及步骤(包括程序流程及说明)
1.建立add8项目
2.建立一位全加器原理图,输入如下
3.将一位全加器封装成芯片FA,如图
4.将FA级联成8位全加器如图,至此8位全加器原理图设计完毕
四、运行结果
建立波形文件,验证8位全加器。

Quartus_II设计八位加法器

Quartus_II设计八位加法器

Q u a r t u s_I I设计八位加法器(总19页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--摘要关键词: 8位加法器;EDA(电子设计自动化);QuartusⅡ(可编程逻辑软件)目录第1章概述..................................................................................................... 错误!未定义书签。

EDA的概念 ...................................................................................................... 错误!未定义书签。

硬件描述语言概述........................................................................................ 错误!未定义书签。

第2章QUARTUS II ...................................................................................... 错误!未定义书签。

QUARTUSII概述............................................................................................. 错误!未定义书签。

QUARTUSII建立工程项目......................................................................... 错误!未定义书签。

QUARTUSII建立原理图输入文件 .......................................................... 错误!未定义书签。

用Quartus II设计电子琴

用Quartus II设计电子琴

(数控分频模块仿真图)
4.自动演奏模块程序与仿真
c.vhd --功 能:实现自动演奏功能。 --最后修改日期:2004.3.19。 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity automusic is Port ( clk,Auto : in std_logic; --系统时钟;键盘输入/自动演奏 index2 : in std_logic_vector(7 downto 0); --键盘输入信号 index0 : out std_logic_vector(7 downto 0));--音符信号输出 end automusic; architecture Behavioral of automusic is signal count0:integer range 0 to 31;--change signal clk2:std_logic; begin
--音符输入信号 --音符显示信号 --高低音显示信号 --音符的分频系数


search :process(index) --此进程完成音符到音符的分频系数译码,音符的显示,高低音阶 begin case index is when "00000001" => tone0<=773;code<="1001111";high<='1'; when "00000010"=> tone0<=912;code<="0010010";high<='1'; when "00000100" => tone0<=1036;code<="0000110";high<='1'; when "00001000" => tone0<=1116;code<="1001100";high<='1'; when "00010000" => tone0<=1197;code<="0100100";high<='1'; when "00100000" => tone0<=1290;code<="0100000";high<='0'; when "01000000" => tone0<=1372;code<="0001111";high<='0'; when "10000000" => tone0<=1410;code<="0000000";high<='0'; when others => tone0<=2047;code<="0000001";high<='0'; end case; end process; end Behavioral;

8位全加器的设计

8位全加器的设计

二、实验原理:一个8位全加器可以由2个4位全加器构成,加法器间的进位可以用串行方式实现,即将低位加法器的进位输出与相临的高位加法器的低进位输入信号相接。

4位全加器采用VHDL语言输入方式进行设计,将设计的4位全加器变成一个元件符号,在8位全加器的设计中进行调用。

三、实验内容和步骤:1. 采用VHDL语言输入方式设计4位全加器(1)打开QuartusII,执行File|New,在New窗口中的Device Design Files 中选择VHDL Files,然后在VHDL文本编译窗中输入程序。

执行File|Save As,找到已设立的文件夹,存盘文件名应该与实体名一致。

(2)将设计项目设置成可调用的元件选择File→create/update→create symbol Files for current file命令,将转换好的元件存在当前工程的路径文件夹中。

2.采用原理图输入方式设计8位全加器(1)打开QuartusII,执行File|New,选择block diagram/schematic file,在原理图编辑窗口中连接好8位全加器电路图(注意元件的调用),存盘。

(2)创建工程:执行File|New Project Wizard,选择目标芯片。

(3)编译:执行Processing|Start Compilation命令,进行编译。

(4)引脚锁定:在菜单Assignments中选Assignments Editor按钮,先单击右上方的Pin,再双击下方最左栏的“New”选项,弹出信号名栏,锁定所有引脚,进行编译,存盘。

选择编程模式1,键2、键1输入8位加数,键4、键3输入8位被加数,键8输入进位cin,数码管6/5显示和,D8显示进位cout。

5. 编程下载及验证:执行Tool|Programmer命令,选择program/config;执行start,进行验证,记录结果。

4位全加器的参考源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY adder4b ISPORT(cin:IN STD_LOGIC;a,b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);s:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout:OUT STD_LOGIC);END ENTITY adder4b;ARCHITECTURE art OF adder4b ISSIGNAL sint,aa,bb:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINaa<='0'&a;bb<='0'&b;sint<=aa+bb+cin;s<=sint(3 downto 0);cout<=sint(4);END art;触发器功能的模拟实现三、实验内容:基本RS触发器、同步RS触发器、集成JK触发器和D触发器同时集成在一个芯片上,实现的原理图如下:输入信号Sd、Rd对应的管脚接按键开关,CLK1、CLK2接时钟源(频率<5Hz);J,K,D,R,S对应的管脚分别接拨码开关;输出信号QRS,NQRS,QRSC,NQRSC,QJK,NQJK,QD,NQD对应管脚分别接LED灯。

用原理图方法设计8位全加器

用原理图方法设计8位全加器

实验报告一一、实验目的熟悉利用QuartusII的原理图输入方法设计简单电路,掌握层次化设计的方法,并通过一个8位全加器的设计把握利用EDA软件进行电子线路设计的详细流程。

二、实验内容1.根据工作原理,完成1位半加器和全加器的设计;2.建立一个更高的原理图设计层次,利用以上获得的1位全加器构成8位全加器,并完成编译、综合、适配、仿真。

三、实验环境计算机、QuartusII软件四、实验步骤1.根据半加器工作原理,建立电路并仿真,并将元件打包。

(1)电路(2)仿真:仿真结果分析:S为和信号,当A=1,B=0或A=0,B=1时,和信号S为1,否则为0.当A=B=1时,产生进位信号,及CO=1。

(3)打包后的文件:2.利用半加器构成一位全加器,并打包。

(1)电路(2)仿真仿真结果分析:CI为来自低位的进位,S=A xor B xor CI,即:当A,B,CI中有一位为高电平‘1’或者三位同时高电平为‘1’,则S=1,否则S=0;当A,B,CI有两位或者三位同为高电平‘1’时,产生进位信号CO=‘1’。

(3)打包后的文件3.利用全加器构成8位全加器,并完成编译、综合、适配、仿真。

(1)电路(2)仿真仿真结果分析:八位全加器,和S分别与A,B 对应。

当来自第七位的进位信号为‘1’、A 的最高位和B的最高位三者有两个位高电平‘1’时,则产生进位信号CO=‘1’。

五、实验结果与讨论实验的仿真结果与预计的结果一致,所以所设计的电路是正确的。

不足的地方有:1、对软件还不够熟悉,所以操作的有点慢;2、设计电路时,由于数字电路的知识有些开始淡忘了,所以应当及时去补缺补弱。

六、总结思考题:为了提高加法器工作速度,如何改进以设计的进位方式?答:采用超前进位。

串行加法器的第i位进位是由0~(i-1)决定的,而超前进位是事先得出每一位全加器的进位输出信号,而无需再从低位开始向高位逐位传递进位信号了,这就有效地提高了工作速度了。

8位ALU设计简介

8位ALU设计简介

8位A L U设计简介-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN
8位ALU设计
一、设计概述
一种基于可编程逻辑器件FPGA和硬件描述语言的8位的ALU的设计方法。

该ALU采用层次设计方法,有寄存器模块、控制模块和显示模块组成,能实现8位无符号数的取值、加减和4种逻辑运算(与、或、异或、同或)。

该ALU在QuartusII软件环境下进行功能仿真,通过DE2验证。

二、设计功能
1、该处理器的数据宽度为8bit,可以实现算术加法、减法、逻辑与、逻辑或、逻辑非、逻辑与非、逻辑或非和逻辑异或等8种运算。

2、用选择端opcode [2:0] 选择8种运算,2个操作数分别是a_r [7:0]和b_r[7:0]
3、使用DE2板上的3个拨码开关设置当前ALU的运算功能,再由8个拨码开关给定数据A和数据B,由一个按键key手动提供脉冲。

三、设计方案
本设计共有5个模块。

1)脉冲输出器(key手动脉冲),计数依次产生4个脉冲到各个部件,第一个脉冲启动信号。

2)寄存器A,第二个脉冲来时锁存数据A,并在数码管上显示。

3)寄存器B,第三个脉冲来时锁存数据B,并在数码管上显示。

4)8位ALU,第四个脉冲来时进行运算,并锁存结果alu_out。

5)结果显示器,将结果显示通过DE2上的数码管显示。

8位ALU算术逻辑单元verilog语言

8位ALU算术逻辑单元verilog语言

理工大学城市学院FPGA实验报告实验容:8位ALU系别班级:电子1004班学号::日期:2013.4.14一.设计概述:一种基于可编程逻辑器件FPGA和硬件描述语言的8位的ALU的设计方法。

该ALU 采用层次设计方法,有寄存器模块、控制模块和显示模块组成,能实现8位无符号数的取值、加减和4种逻辑运算(与、或、异或、同或)。

该ALU在QuartusII软件环境下进行功能仿真,通过DE2验证。

二.设计功能:1、该处理器的数据宽度为8bit,可以实现算术加法、减法、逻辑与、逻辑或、逻辑非、逻辑与非、逻辑或非和逻辑异或等8种运算。

2、用选择端opcode [2:0] 选择8种运算,2个操作数分别是a_r [7:0]和b_r[7:0],运算结果是alu_out[7:0];并定义选择如下。

3、使用DE2板上的3个拨码开关设置当前ALU的运算功能,再由8个拨码开关给定数据A和数据B,由一个按键key手动提供脉冲。

三.设计方案:本设计共有5个模块。

1)脉冲输出器(key手动脉冲),计数依次产生4个脉冲到各个部件,第一个脉冲启动信号。

2)寄存器A,第二个脉冲来时锁存数据A,并在数码管上显示。

3)寄存器B,第三个脉冲来时锁存数据B,并在数码管上显示。

4)8位ALU,第四个脉冲来时进行运算,并锁存结果alu_out。

5)结果显示器,将结果显示通过DE2上的数码管显示。

四.程序分析:主程序模块:module alu8(clk,clk_r,rst,a,b,alu_out,opcode,sw_ab,HEX1, HEX0, HEX7, HEX6, HEX5, HEX4);input clk,rst,clk_r;input [7:0] sw_ab;input [2:0] opcode;output [6:0] HEX1, HEX0, HEX7, HEX6, HEX5, HEX4;output [7:0] a;output [7:0] b;output [7:0] alu_out;rega U1(.clk(clk),.rst(rst),.sw_ab(sw_ab),.a_r(a),.clk_r(clk_r),.HEX7(HEX7),. HEX6(HEX6)); regb U2(.clk(clk),.rst(rst),.sw_ab(sw_ab),.b_r(b),.clk_r(clk_r),.HEX5(HEX5),. HEX4(HEX4)); alur U3(.clk(clk),.rst(rst),.a_r(a),.b_r(b),.alu_out(alu_out),.opcode(opcode));digital U4(.clk_r(clk_r),.rst(rst),.alu_out(alu_out),.HEX1(HEX1),. HEX0(HEX0)); endmodule第一位数A模块:module rega (clk,clk_r,rst,sw_ab,a_r,HEX7,HEX6);input [7:0] sw_ab;input clk,clk_r,rst;output [7:0] a_r;reg [7:0] a_r;output reg[6:0] HEX7,HEX6;reg [3:0]t;always (posedge clk or negedge rst)if(!rst)t<=1'd0;else if(cnt==5)t<=1'd0;elset<=cnt+1'd1;always (posedge clk or negedge rst)if(!rst) a_r=0;else if(cnt==1) a_r=sw_ab;else a_r=a_r;parameter seg0=7'b1000000,seg1=7'b1111001,seg2=7'b0100100,seg3=7'b0110000,seg4=7'b0011001,seg5=7'b0010010, seg6=7'b0000010,seg7=7'b1111000,seg8=7'b0000000,seg9=7'b0010000,sega=7'b0001000,segb=7'b00000 11,segc=7'b1000110,segd=7'b0100001,sege=7'b0000110,segf=7'b0001110;always (posedge clk_r)case(a_r[3:0])4'h0: HEX6[6:0]=seg0;4'h1: HEX6[6:0]=seg1;4'h2: HEX6[6:0]=seg2;4'h3: HEX6[6:0]=seg3;4'h4: HEX6[6:0]=seg4;4'h5: HEX6[6:0]=seg5;4'h6: HEX6[6:0]=seg6;4'h7: HEX6[6:0]=seg7;4'h8: HEX6[6:0]=seg8;4'h9: HEX6[6:0]=seg9;4'ha: HEX6[6:0]=sega;4'hb: HEX6[6:0]=segb;4'hc: HEX6[6:0]=segc;4'hd: HEX6[6:0]=segd;4'he: HEX6[6:0]=sege;4'hf: HEX6[6:0]=segf;default:HEX6[6:0]=seg0;endcasealways (posedge clk_r)case(a_r[7:4])4'h0: HEX7[6:0]=seg0;4'h1: HEX7[6:0]=seg1;4'h2: HEX7[6:0]=seg2;4'h3: HEX7[6:0]=seg3;4'h4: HEX7[6:0]=seg4;4'h5: HEX7[6:0]=seg5;4'h6: HEX7[6:0]=seg6;4'h7: HEX7[6:0]=seg7;4'h8: HEX7[6:0]=seg8;4'h9: HEX7[6:0]=seg9;4'ha: HEX7[6:0]=sega;4'hb: HEX7[6:0]=segb;4'hc: HEX7[6:0]=segc;4'hd: HEX7[6:0]=segd;4'he: HEX7[6:0]=sege;4'hf: HEX7[6:0]=segf;default:HEX7[6:0]=seg0;endcaseendmodule第二位数B模块:module regb (clk,clk_r,rst,sw_ab,b_r,HEX5,HEX4); input [7:0] sw_ab;input clk,clk_r,rst;output [7:0] b_r;reg [7:0] b_r;output reg[6:0] HEX5,HEX4;reg [3:0]t;always (posedge clk or negedge rst)if(!rst)t<=1'd0;else if(cnt==5)t<=1'd0;elset<=cnt+1'd1;always (posedge clk or negedge rst)if(!rst) b_r=0;else if(cnt==2) b_r=sw_ab;else b_r=b_r;parameter seg0=7'b1000000,seg1=7'b1111001,seg2=7'b0100100,seg3=7'b0110000,seg4=7'b0011001,seg5=7'b0010010,seg6=7'b000001 0,seg7=7'b1111000,seg8=7'b0000000,seg9=7'b0010000,sega=7'b0001000,segb=7'b00000 11,segc=7'b1000110,segd=7'b0100001,sege=7'b0000110,segf=7'b0001110;always (posedge clk_r)case(b_r[3:0])4'h0: HEX4[6:0]=seg0;4'h1: HEX4[6:0]=seg1;4'h2: HEX4[6:0]=seg2;4'h3: HEX4[6:0]=seg3;4'h4: HEX4[6:0]=seg4;4'h5: HEX4[6:0]=seg5;4'h6: HEX4[6:0]=seg6;4'h7: HEX4[6:0]=seg7;4'h8: HEX4[6:0]=seg8;4'h9: HEX4[6:0]=seg9;4'ha: HEX4[6:0]=sega;4'hb: HEX4[6:0]=segb;4'hc: HEX4[6:0]=segc;4'hd: HEX4[6:0]=segd;4'he: HEX4[6:0]=sege;4'hf: HEX4[6:0]=segf;default:HEX4[6:0]=seg0;endcasealways (posedge clk_r)case(b_r[7:4])4'h0: HEX5[6:0]=seg0;4'h1: HEX5[6:0]=seg1;4'h2: HEX5[6:0]=seg2;4'h3: HEX5[6:0]=seg3;4'h4: HEX5[6:0]=seg4;4'h5: HEX5[6:0]=seg5;4'h6: HEX5[6:0]=seg6;4'h7: HEX5[6:0]=seg7;4'h8: HEX5[6:0]=seg8;4'h9: HEX5[6:0]=seg9;4'ha: HEX5[6:0]=sega;4'hb: HEX5[6:0]=segb;4'hc: HEX5[6:0]=segc;4'hd: HEX5[6:0]=segd;4'he: HEX5[6:0]=sege;4'hf: HEX5[6:0]=segf;default:HEX5[6:0]=seg0;endcaseendmodule运算模块:module alur(clk,rst,alu_out,a_r,b_r,opcode,zero);output [7:0] alu_out;output zero;input [7:0] a_r,b_r;input [2:0] opcode;input clk,rst;reg [7:0] alu_out;reg [3:0]t;parameterquA=3'b000,quB=3'b001,ADD=3'b010,DEC=3'b011,ANDD=3'b100,XORR=3'b101,XOR =3'b110,NXOP=3'b111;assign zero=!a_r;always (posedge clk or negedge rst)if(!rst)t<=1'd0;else if(cnt==5)t<=1'd0;elset<=cnt+1'd1;always (posedge clk or negedge rst)if(!rst) alu_out=0;else if(cnt==3) begincasex(opcode)quA: alu_out<=a_r;quB: alu_out<=b_r;ADD: alu_out<=a_r+b_r;DEC: alu_out<=a_r-b_r;ANDD: alu_out<=a_r&b_r;XORR: alu_out<=a_r|b_r;XOR: alu_out<=a_r^b_r;NXOP: alu_out<=a_r^~b_r;default: alu_out<=8'bxxxx_xxxx;endcaseendelse alu_out=0;endmodule结果显示模块:module digital(clk_r,rst,alu_out,HEX1,HEX0);input [7:0] alu_out;input clk_r,rst;output reg[6:0] HEX1,HEX0;parameter seg0=7'b1000000,seg1=7'b1111001,seg2=7'b0100100,seg3=7'b0110000,seg4=7'b0011001,seg5=7'b0010010,seg6=7'b000001 0,seg7=7'b1111000,seg8=7'b0000000,seg9=7'b0010000,sega=7'b0001000,segb=7'b00000 11,segc=7'b1000110,segd=7'b0100001,sege=7'b0000110,segf=7'b0001110;always (posedge clk_r)case(alu_out[3:0])4'h0: HEX0[6:0]=seg0;4'h1: HEX0[6:0]=seg1;4'h2: HEX0[6:0]=seg2;4'h3: HEX0[6:0]=seg3;4'h4: HEX0[6:0]=seg4;4'h5: HEX0[6:0]=seg5;4'h6: HEX0[6:0]=seg6;4'h7: HEX0[6:0]=seg7;4'h8: HEX0[6:0]=seg8;4'h9: HEX0[6:0]=seg9;4'ha: HEX0[6:0]=sega;4'hb: HEX0[6:0]=segb;4'hc: HEX0[6:0]=segc;4'hd: HEX0[6:0]=segd;4'he: HEX0[6:0]=sege;4'hf: HEX0[6:0]=segf;default: HEX0[6:0]=seg0;endcasealways (posedge clk_r)case(alu_out[7:4])4'h0: HEX1[6:0]=seg0;4'h1: HEX1[6:0]=seg1;4'h2: HEX1[6:0]=seg2;4'h3: HEX1[6:0]=seg3;4'h4: HEX1[6:0]=seg4;4'h5: HEX1[6:0]=seg5;4'h6: HEX1[6:0]=seg6;4'h7: HEX1[6:0]=seg7;4'h8: HEX1[6:0]=seg8;4'h9: HEX1[6:0]=seg9;4'ha: HEX1[6:0]=sega;4'hb: HEX1[6:0]=segb;4'hc: HEX1[6:0]=segc;4'hd: HEX1[6:0]=segd;4'he: HEX1[6:0]=sege;4'hf: HEX1[6:0]=segf; default: HEX1[6:0]=seg0; endcaseendmodule五.仿真实现:整体图:波形图:六.硬件实现:1.引脚图:2.分析结果说明:开关0~2是算法选择,具体算法类型见设计功能第2项开关10~17数字输入,用8位二进制数表示两个十六进制数,每四位表示一位按键0是锁存及运算,当开关10~17输入一个数A时,按下按键0,数据就是锁存,再输入数就是数B,而当数据B也锁存后,再次按下按键0,就会显示运算结果按键1是复位键七.总结:通过这次FPGA实验课让我明白了真正的编程不像是那些C语言小程序那么简单,为了这次实验算是绞尽脑汁,最后为了读懂程序,还去专门找了Verilog语言辅导书,不管过程再怎么复杂曲折,总算是顺利的完成了实验任务,到了现在回顾为期6周的学习过程,也有一些时候是因为上课不认真,为后来的程序设计增加了难度,也有一些原因是因为自己本身能力不足导致设计接连失败,不得不说,也有一部分原因是因为学习实验室的器件不足,限制了实验设计的围,也使实验难度增加。

QuartusII基本设计流程

QuartusII基本设计流程

Q u a r t u s I I基本设计流程Lele was written in 2021第2章 Quartus Ⅱ应用向导Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。

此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。

目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。

Altera 在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。

Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

实验一 Quartus II基本操作

实验一  Quartus II基本操作

实验一 Quartus II基本操作一、实验目的1.了解Quartus II软件的功能。

2.初步掌握Quartus II的VHDL输入方法。

3.掌握Quartus II编译、功能仿真和时序仿真。

4.掌握Quartus II管脚分配、综合与实现、数据流下载方法。

二、实验内容本实验以8位全加器为例,在Quartus II软件平台上完成设计电路的VHDL文本输入,编辑,编译,仿真,关键分配和编程下载等操作。

下载芯片选择Altera公司的FLEX10K系列的EPF10K10LC84-3器件。

1. VHDL源程序的输入Quartus II环境下,执行“file”的“New Project Wizard”命令,为8位全加器建立设计项目。

项目名称为adder8;出现选择芯片对话框,我们选择FLEX10K系列的EPF10K10LC84-3器件作为仿真芯片;finish完成设置。

Quartus II环境下,执行“file”的“New”命令,在弹出的编辑文件类型对话框中,选择“VHDL File”,ok进入Quartus II文本编辑方式,在文本框中编辑输入8位全加器的VHDL 源程序。

在VHDL源程序中,A和B是两个8位二进制输入信号,CIN是低位进位输入信号,SUM是8位加数之和的输出信号,COUT是向高位进位的输出信号。

2. 设计文件存盘与编译adder8.vhd为文件名将二选一数据的VHDL源程序设计文件保存在工程目录中,*.vhd表示VHDL文本文件。

Quartus II环境下,执行“Processing”的“start Compilation”命令,或者在主窗口上直接单击“start Compilation”按钮,对adder8.vhd设计文件进行编译。

如果输入无语法错误的话,编译完成后的结果如下图所示:adder8所占用的EPF10K10LC84-3芯片宏单元的2%,占用引脚数为44%,没有用存储单元。

应用原理图方法设计八位二进制加法器

应用原理图方法设计八位二进制加法器
②同理,再进行一位全加器的设计,如图3-4所示。 编译后,生成全加器的元件符号(图3-5),以便设计八位加法器时 调用。 ③采用串行进位的方式,进行八位二进制加法器的设计,如图3-6 所示。 编译正确后,即完成了八位二进制加法器的前期设计工作。
上一页 下一页
§3.2 完成工作任务的引导
五、检查
QuartusⅡ 6.0软件的编译工具,主要是检查原理图或程序语法上 是否有错误,但不能验证逻辑关系是否有错误,验证所设计的电路是 否符合设计的要求,需要利用仿真工具进行波形仿真。下面对八位二 进制加法器的各个底层模块和顶层模块进行仿真,以验证所设计的原 理图逻辑上是否符合设计的要求。
二、任务的背景
加法器是数字系统中的基本逻辑器件,也是最基本的数字算法 ,无论乘法、减法、除法或FFT运算最终也要分解为加法运算。因 此,加法器的设计是一个最基础的设计之一。
返回
§3.2 完成工作任务的引导
一、资讯
为了完成八位二进制加法器的设计,首先要进行以下几点的准备工
作:
1.了解加法器及相关基本知识
下一页
第3章 应用原理图方法设计 八位二进制加法器
§3.1 工作任务的陈述与背景 §3.2 完成工作任务的引导 §3.3 相关技术基本知识与基本技能 §3.4 本章小结
上一页
§3.1 工作任务的陈述与背景
一、任务的陈述
设计一个八位二进制加法器:要求在Quartus II 6.0软件的工 作平台上用原理图的设计方式和层次化设计的方法设计出一个八位 二进制加法器,并通过编译及时序仿真检查设计结果。
根据上节中的知识,制订设计方案如图3-1所示。
三、决策
从方案上看,设计方案至少有3种,下面来对这3种方案进行分析:

8位全加器的设计与实现

8位全加器的设计与实现

实验二 8位全加器的设计与实现[实验目的]1 掌握Quartus II 环境下原理图输入、编译综合、仿真、引脚锁定、下载及硬件测试测试方法;2 掌握Quartus II 对FPGA 的设计方法。

3 学习8位全加器原理图的设计,掌握Quartus II 原理图层次化设计方法。

[实验仪器]Pentium PC 机 、EDA 实验箱 各一台 Quartus II 6.0软件 [实验内容]采用Quartus II 原理图输入方式及层次化设计方法设计8位全加器并进行器件编程、检测。

1. 完成全加器的设计(包括原理图输入、编译综合、适配、仿真并将它们设置成硬件符号入库)。

2. 建立顶层原理图文件。

采用已产生的全加器元件设计一个8位串行全加器电路,并完成编译综合、适配、仿真和硬件测试。

一、一位全加器每个全加器有三位输入,分别是加数A,B 和一个进位位CI 。

将这三个数相加,得出全加和数D 和进位数CO 。

这个过程称为”全加”,全加器的真值表参见表1。

全加器的真值表1 A B CI CO D0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 11由表2得: ABCI CI AB CI B A BCI A CO +++= D ABCI ABCI ABCI ABCI =+++ 可用两个四选一芯片完成。

原理图如下:ABCI100011110111cout D0D1D2D31ABCI100011110111S D0D1D2D31可得:Cout 的连接方式如下: D0=0;D1=CI=D2;D3=1 S 的连接方式如下: D0=CI;D1=CI =D2;D3=CI选用两片4选1,可绘制全加器如图1所示。

VCCciINPUT VCC A INPUT VCCBINPUT SOUTPUTCOUTOUTPUT S0D2S1D3D0INH D1QMUX41inst9NOTinst10S0D2S1D3D0INH D1Q MUX41instGNDVCC图1一位全加器1. 为全加器项目工程设计建立文件夹Windows 环境下在D :盘建立8位加法器设计项目的文件夹,取名为adder8, 路径为d :\adder8。

QuartusII软件操作基础

QuartusII软件操作基础

QuartusII软件操作基础第2章 Quartus II软件操作基础本章介绍Altera公司的Quartus II(6.0版本)软件的使⽤⽅法,作为EDA实训设计的基础。

通过本章的学习,读者可初步采⽤Quartus II软件的原理图输⼊法和HDL⽂本输⼊法,来设计数字电路和系统,并掌握⽤EDA实训仪设计电路进⾏硬件验证的⽅法。

uartus II是Altera公司近⼏年推出的新⼀代、功能强⼤的可编程逻辑器件设计环境,⾄今已公布了 6.0以上版本。

Quartus II 软件提供了SOPC设计的综合开发环境,是SOPC设计的基础。

Quartus II集成环境⽀持系统级设计、嵌⼊式系统设计和可编程器件设计的设计输⼊、编译、综合、布局、布线、时序分析、仿真、编程下载等EDA设计过程。

Quartus II⽀持多种编辑输⼊法,包括图形编辑输⼊法,VHDL、Verilog HDL和AHDL的⽂本编辑输⼊法,符号编辑输⼊法,以及内存编辑输⼊法。

下⾯以Quartus II 6.0版本为例,介绍Quartus II 软件的基本操作。

2.1 Quartus II软件的安装Quartus II 6.0版本设计软件的安装⽐较简单,只要把Quartus II 6.0设计软件光盘放⼊计算机的光驱中,安装光盘将⾃动引导完成Quartus II 6.0的安装。

但软件安装结束之后,还必须在软件中指定Altera 公司的授权⽂件(License.dat ),才能正常使⽤Quartus II 软件。

在Windows 2000或Windows XP 系统下指定授权⽂件的操作步骤如下:①打开Windows 窗⼝下的“控制⾯板”,⽤⿏标左键双击控制⾯板上的“系统”图标(或⽤⿏标右键点击“我的电脑”,在弹出的对话框中选择“属性”),在弹出的“系统特性”对话框中展开“⾼级”页⾯,如图2.1所⽰。

⽤⿏标左键点击该页⾯上的“环境变量”按钮,弹出如图2.2所⽰的“环境变量”对话框。

quartus2的原理图设计及应用

quartus2的原理图设计及应用

Quartus2的原理图设计及应用1. 介绍Quartus2是一款由Intel(原Altera)公司开发的用于FPGA(现场可编程逻辑门阵列)设计的集成开发环境(IDE)。

它提供了丰富的工具和功能,使得原理图设计和FPGA应用开发变得更加易于实现。

本文将介绍Quartus2的原理图设计流程以及其在实际应用中的一些常见用途。

2. Quartus2的原理图设计流程Quartus2的原理图设计流程主要包括项目创建、电路图绘制、电路仿真和综合、布局与布线以及生成最终的比特流文件等步骤。

2.1 项目创建在Quartus2中创建一个项目是第一步,可以通过选择项目名称、项目文件夹路径等信息来进行项目设置。

在项目创建时,需要选择目标FPGA器件的型号和设计目标等参数,以便Quartus2能够进行正确的综合和布局布线。

2.2 电路图绘制在项目创建完成后,可以使用Quartus2提供的电路图设计工具来进行电路图绘制。

电路图设计工具提供了丰富的元件库和线连接工具,可根据需求绘制各种逻辑电路和模块。

2.3 电路仿真与综合完成电路图绘制后,可以使用Quartus2提供的仿真工具对设计的电路进行仿真,并验证其功能和性能。

通过仿真结果,可以进一步调整和优化电路设计。

在电路仿真验证通过后,可以进行综合操作,将电路转化为FPGA的可编程逻辑。

Quartus2的综合工具会根据目标FPGA器件的特性和约束,生成逻辑元件的门级描述。

2.4 布局与布线综合完成后,需要进行布局和布线,将逻辑元件映射到FPGA的实际物理位置上,并通过连线完成逻辑之间的连接。

Quartus2的布局布线工具会根据目标FPGA 器件的布局规则和约束,自动完成布线。

2.5 生成比特流文件布局布线完成后,最后一步是生成最终的比特流文件(bitstream),该文件包含了FPGA的配置信息。

生成比特流文件后,可以通过下载到目标FPGA器件上进行验证和调试。

3. Quartus2在实际应用中的常见用途3.1 数字逻辑设计Quartus2广泛应用于数字逻辑设计领域,可用于设计各种逻辑电路,如加法器、多路选择器、寄存器等。

计算机组成原理实验报告_八位补码加减法器的设计与实现

计算机组成原理实验报告_八位补码加减法器的设计与实现

计算机科学与技术学院计算机组成原理实验报告书实验名称八位补码加/减法器的设计与实现班级学号姓名指导教师日期成绩实验1八位补码加/减法器的设计与实现一、实验目的1.掌握算术逻辑运算单元(ALU)的工作原理。

2.熟悉简单运算器的数据传送通路。

3.掌握8位补码加/减法运算器的设计方法。

4.掌握运算器电路的仿真测试方法二、实验任务1.设计一个8位补码加/减法运算器(1)参考图1,在QUARTUS II里输入原理图,设计一个8位补码加/减法运算器。

(2)创建波形文件,对该8位补码加/减法运算器进行功能仿真测试。

(3)测试通过后,封装成一个芯片。

2.设计8位运算器通路电路参考下图,利用实验任务1设计的8位补码加/减法运算器芯片建立运算器通路。

3.利用仿真波形,测试数据通路的正确性。

设定各控制信号的状态,完成下列操作,要求记录各控制信号的值及时序关系。

(1)在输入数据IN7~IN0上输入数据后,开启输入缓冲三态门,检查总线BUS7~BUS0上的值与IN0~IN7端输入的数据是否一致。

(2)给DR1存入55H,检查数据是否存入,请说明检查方法。

(3)给DR2存入AAH,检查数据是否存入,请说明检查方法。

(4)完成加法运算,求55H+AAH,检查运算结果是否正确,请说明检查方法。

(5)完成减法运算,分别求55H-AAH和AAH-55H,检查运算结果是否正确,请说明检查方法。

(6)求12H+34H-56H,将结果存入寄存器R0,检查运算结果是否正确,同时检查数据是否存入,请说明检查方法。

三、实验要求(1)做好实验预习,掌握运算器的数据传送通路和ALU的功能特性。

(2)实验完毕,写出实验报告,内容如下:①实验目的。

②实验电路图。

③按实验任务3的要求,填写下表,以记录各控制信号的值及时序关系。

表中的序号表示各控制信号之间的时序关系。

要求一个控制任务填一张表,并可用文字对有关内容进行说明。

⑤实验体会与小结。

四、实验预习内容1.实验电路设计原理及思路说明本实验利用基本逻辑门电路设计一位全加器(FA),如表1:表1-一位全加器(FA)电路的输入输出信号说明然后以此基础上实现八位补码加/减法器的设计,考虑到实现所需既可以实现加法又可以实现减法,所以使用了一个M输入来进行方式控制加减。

quartusii课程设计

quartusii课程设计

quartus ii 课程设计一、课程目标知识目标:1. 理解Quartus II软件的基本操作与界面布局,掌握FPGA设计的基本流程;2. 学习并掌握VHDL硬件描述语言的语法和结构,能够利用VHDL编写简单的数字电路程序;3. 了解FPGA芯片的基本结构及其工作原理,掌握基本的硬件编程概念。

技能目标:1. 能够独立使用Quartus II软件进行FPGA设计的输入、编译、仿真和下载;2. 能够运用VHDL语言设计简单的数字电路,如加法器、计数器等;3. 能够分析FPGA设计中出现的问题,并提出相应的解决方案。

情感态度价值观目标:1. 培养学生对电子设计及编程的兴趣,激发学生的创新意识和探索精神;2. 培养学生团队协作意识,学会与他人共同分析问题、解决问题;3. 培养学生严谨的学习态度,注重细节,养成良好的编程习惯。

分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握FPGA设计基本知识和技能的基础上,培养实际工程应用能力,提高学生的综合素质。

通过课程学习,使学生能够将所学知识应用于实际项目中,为今后的学习和工作打下坚实基础。

二、教学内容1. Quartus II软件概述:介绍软件的界面、基本操作和功能模块;教材章节:第1章 软件概述与基本操作2. VHDL硬件描述语言:讲解VHDL的基本语法、结构及编程规范;教材章节:第2章 VHDL语言基础3. 数字电路设计:学习组合逻辑电路和时序逻辑电路的设计方法;教材章节:第3章 组合逻辑电路设计、第4章 时序逻辑电路设计4. FPGA设计流程:介绍从设计输入到硬件实现的完整流程;教材章节:第5章 FPGA设计流程5. 常用数字电路设计实例:分析并实践加法器、计数器等常见数字电路;教材章节:第6章 常用数字电路设计实例6. FPGA硬件编程:学习FPGA芯片的基本结构及编程方法;教材章节:第7章 FPGA硬件编程7. 课程项目实践:综合运用所学知识,进行项目设计和实践;教材章节:第8章 课程项目实践教学内容按照教材章节顺序安排,确保学生能够循序渐进地掌握FPGA设计和VHDL编程的知识。

Quartus II设计八进制计数器的两种方法

Quartus II设计八进制计数器的两种方法
CARRY1:OUT STD_LOGIC);
END ENTITY COUNT8;
ARCHITECTURE ART OF COUNT8 IS
SIGNAL CQI:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IF CLR='1'THEN
2、新建项目:
Quartus II建议相关的设计、仿真、目标文件等信息都以项目的形式管理。
项目文件建议保存在一个用户指定的文件夹中。因此我们首先要利用Windows操作系统建立一个文件夹。然后,通过界面左边任务列表中的“Open New Project Wizard”选项,或者主菜单File下有“New Project Wizard”子菜单进入新项目向导界面。
END ENTITY COUNTER8;
ARCHITECTURE ART OF COUNTER8 IS
SIGNAL CURRENT_STATE,NEXT_STATE:STATE_T;
BEGIN
SYNC:PROC
CURRENT_STATE<=S0;
ELSIF(CLK'EVENT AND CLK='1')THEN
CURRENT_STATE<=NEXT_STATE;
END IF;
END PROCESS SYNC;
FSM:PROCESS(CURRENT_STATE) IS
BEGIN
NEXT_STATE<=S0;
IF(INC='1')THEN
CASE CURRENT_STATE IS
向导介绍界面提示用户,本向导要输入的内容有项目的名称和目录;顶层设计文件的名称;项目和库文件;目标器件族和目标器件;EDA工具设置。点击“Next”按钮进入下一个对话框界面。在此界面中需要填写项目名Name of project,工作目录Working Directory for this project,顶层文件名要和设计文件中的实体名一致。点击“Next”按钮,进入向导的下一个对话框。在这里可以把已有的文件纳入新的项目中。如果有已经存在的文件,那么可以通过这一步,将其归入本项目。然后点击“Next”按钮,进入硬件选择对话框。点击“Next”按钮,进入Summary对话框,如下图所示。对话框中的内容是之前各步输入信息的归纳,如果核对无误,点击“Finish”按钮。系统自动生成对应的项目。

基于quartus2十六进制8位数码管扫描显示频率计设计

基于quartus2十六进制8位数码管扫描显示频率计设计

Ftctrl时钟控制模块的vhdl代码:(clkk一定要是1s周期脉冲啊,没有的话就拿分频器分频) LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL ISPORT (CLKK : IN STD_LOGIC;CNT_EN : OUT STD_LOGIC;RST_CNT: OUT STD_LOGIC;Load : OUT STD_LOGIC);END FTCTRL;ARCHITECTURE behav OF FTCTRL ISSIGNAL Div2CLK : STD_LOGIC;BEGINPROCESS ( CLKK ) BEGINIF CLKK'EVENT AND CLKK = '1' THENDiv2CLK <= NOT Div2CLK;END IF;END PROCESS;PROCESS (CLKK ,Div2CLK) BEGINIF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1';ELSE RST_CNT <='0'; END IF;END PROCESS;Load <= NOT Div2CLK; CNT_EN <=Div2CLK;END behav;4位计数器cnt4b的vhdl代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B ISPORT (Fin,CLR,ENABL: IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT4B;ARCHITECTURE behav OF CNT4B ISBEGINPROCESS(Fin,CLR,ENABL)VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLR='1' THEN Q := (OTHERS=>'0');ELSIF Fin'EVENT AND Fin='1' THENIF ENABL='1' THENIF Q<15 THEN Q :=Q+1;ELSE Q := (OTHERS=>'0');END IF;END IF;END IF;IF Q="1111" THEN COUT<='1';ELSE COUT<='0'; END IF;DOUT <= Q;END PROCESS;END behav;分频器模块fp的vhdl代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fp ISPORT( inclk : IN STD_LOGIC;outclk : OUT STD_LOGIC);END fp;ARCHITECTURE a OF fp ISSIGNAL fp : STD_LOGIC_VECTOR(3 downto 0);SIGNAL f : STD_LOGIC;BEGINPROCESS(inclk)BEGINIF inclk'event and inclk='0' THENIF fp=4then fp<="0000"; f<=not f;ELSE fp<=fp+1;END IF; --“4”那里自己改,outclk频率是inclk频率的1/[2*(4+1)] END IF;END PROCESS;outclk<=f;END a;---------------------------------------------------------------------------------------------------------------------------------缓存信号输出模块topreg32b的vhdl代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TOPREG32B ISPORT (LK : IN STD_LOGIC;DIN :IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT0 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END TOPREG32B;ARCHITECTURE ONE OF TOPREG32B ISSIGNAL Q0 : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL H1 : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINA:PROCESS (LK)VARIABLE H : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF LK='1' AND LK'EVENT THENIF H<=7 THEN H:=H+1;DOUT0<=Q0;DOUT1<=Q1;ELSE H:= (OTHERS=>'0');END IF;END IF;H1<=H;END PROCESS A ;B:PROCESS (H1,DIN)BEGINCASE H1 ISWHEN "000"=>Q0<=DIN(3 DOWNTO 0);Q1<=(OTHERS=>'0'); WHEN "001"=>Q0<=DIN(7 DOWNTO 4);Q1<=(OTHERS=>'0'); WHEN "010"=>Q0<=DIN(11 DOWNTO 8);Q1<=(OTHERS=>'0'); WHEN "011"=>Q0<=DIN(15 DOWNTO 12);Q1<=(OTHERS=>'0'); WHEN "100"=>Q1<=DIN(19 DOWNTO 16);Q0<=(OTHERS=>'0'); WHEN "101"=>Q1<=DIN(23 DOWNTO 20);Q0<=(OTHERS=>'0'); WHEN "110"=>Q1<=DIN(27 DOWNTO 24);Q0<=(OTHERS=>'0'); WHEN "111"=>Q1<=DIN(31 DOWNTO 28);Q0<=(OTHERS=>'0'); WHEN OTHERS => NULL;END CASE;END PROCESS B;END ONE;数码管decoder译码模块的vhdl代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder isport(a : in std_logic_vector(3 downto 0);clk : in std_logic;led7s : out std_logic_vector(6 downto 0);K : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));end;architecture one of decoder issignal h1: std_logic_vector(2 downto 0);signal k1 : std_logic_vector( 8 downto 0);beginD:process(a)begincase a iswhen"0000"=>led7s<="0111111"; when"0001"=>led7s<="0000110"; when"0010"=>led7s<="1011011"; when"0011"=>led7s<="1001111"; when"0100"=>led7s<="1100110"; when"0101"=>led7s<="1101101"; when"0110"=>led7s<="1111101"; when"0111"=>led7s<="0000111"; when"1000"=>led7s<="1111111"; when"1001"=>led7s<="1101111"; when"1010"=>led7s<="1111100"; when"1011"=>led7s<="0111111"; when"1100"=>led7s<="0111001"; when"1101"=>led7s<="1011110"; when"1110"=>led7s<="1111001"; when"1111"=>led7s<="1110001";when others=>null;end case;end process D;B:PROCESS (clk)VARIABLE H : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGINIF cLK='1' AND cLK'EVENT THENIF H<=7 THEN H:=H+1;ELSE H:= (OTHERS=>'0');END IF;END IF;H1<=H;END PROCESS B ;C:PROCESS (H1)BEGINCASE H1 ISWHEN "000"=>K1<="000000001";WHEN "001"=>K1<="000000010";WHEN "010"=>K1<="000000100";WHEN "011"=>K1<="000001000";WHEN "100"=>K1<="000010000";WHEN "101"=>K1<="000100000";WHEN "110"=>K1<="001000000";WHEN "111"=>K1<="010000000";WHEN OTHERS => NULL;END CASE;END PROCESS C;k<=k1(8 downto 1);end;然后上顶层文件原理图:--------------------------------------------------------------------------------------------------------------------------------- 不知道啥是cnt32b?那是由8个cnt4b计数器组成的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8位ALU
内容:1)本设计要求该处理器的数据宽度是8bit,可以实现算术加法、算术减法、逻辑与、逻辑或、逻辑非、逻辑与非、逻辑或非和逻辑异或等8 种运算。

2)用选择端Choice[3..0]选择8种运算,2个操作数分别是A[3..0]和B[3..0],运算结果是S[3..0]以及标志位OV(OverFlow)和Cout;
并定义当选择端为000为算术加法、001为算术减法、010为逻辑与、011为逻辑或、100为逻辑非(只对数据A求非)、101为逻辑与非、 110为逻辑或非、111为逻辑异或。

3)整个ALU的设计上均采用补码形式输入和输出,其中第一位为符号位。

4)使用DE-2板上的3个拨码开关要来设置当前ALU的运算功能,再由8个拨码开关给定数据A和数据B,由一个按键手动提供脉冲。

该设计的顶层模块图如下页所示:
设计说明:本设计共有6个模块组成,包括:
1)脉冲输出器,计数依次产生四个脉冲到各个部件;
2)寄存器A,第一个脉冲来时锁存数据A;
3)寄存器B,第二个脉冲来时锁存数据B;
4)8位ALU,由两个4位ALU组成;第三个脉冲来时进行运算;
5)寄存器S,第四个脉冲来时锁存结果S;
6)结果显示器,将结果显示在DE2板上。

其中右上角的test[7..0]输出端是为了仿真方便看结果。

对其进行时序仿真,其中各引脚含义如下:
KEY[0] 即一脉冲按键,用于手动给脉冲,在此给一个60ns的时钟脉冲;
SW[7..0] 即给定数据A和数据B,第一个脉冲给数据A,第二个脉冲给数据B;
choice[3..0] 功能选择端;
LEDR[17] 如上图可知其为进位输出端;
LEDR[10] 如上图可知其为溢出输出端;
test[7..0] 结果输出端;
时序仿真图如下图一所示:(加法)
图一
现对前四个脉冲进行分析:
第一个脉冲,锁存数据A,由图的SW可知A=0;
第二个脉冲,锁存数据B,由图的SW可知B=1;
第三个脉冲,进行运算
第四个脉冲,锁存结果,由图的test可知S=1
之后的原理同上。

下面给出8位ALU的设计图:
设计说明:
1)其中输出端sub_in当加减模块,且做减法时为高(数据B取非后的加1);
2)其主要由两个4位的ALU串联而成。

下面给出四位ALU的设计图:
设计说明:
1)最上面为一个四位八路的或,即每一位都是由八个结果的该位或而得(没选中的模块输出全为0);
2)中间位7个运算模块,选中时/choice端输入为低,未选中的模块其输出结果都为0;
3)左下角为一个选择模块,根据输入的choice选中相应的模块低电平有效(类似74138),其另一输出端add/sub为是否选中加减法模块的输出端,选中为0。

4) 加减法模块做加或减法由其输入端sub//add决定,低表示做加法,其连接选择模块的SL[0]即当choice为000(加法)时为低。

Cout OV sub_in S[3..0]
将sub_in接回Cin,对其做仿真,仿真图如下图二:(减法)
图二
如图二,OV端:当 2 - (-8) = 10(溢出),故OV端变为高,而在 2 - (-5) = 7(未溢出),OV变为低,其他亦同;
Cout端:当2 - 0时相当于 2 + (-0)即其二进制形式为 0010 + 1111 + 1(Cin) = 1 0010,故Cout端为高,其他亦同。

将sub_in接回Cin,改变Choice端做仿真,仿真图如下图三:
图三
如图三,当第一个脉冲来时,A和B存入到寄存器中,之后通过改变Choice改变选中的模块,最终得出不同的结果;
当Choice为0(000)时,加法,3+1 = 4;当Choice为1(001)时,减法,3-1 = 2;
当Choice为2(010)时,与,3(0011)与1(0001)= 1(0001);
当Choice为3(011)时,或,3(0011)或1(0001)= 3(0011);
当Choice为4(100)时,非,3(0011)非 = 12(1100);
当Choice为5(101)时,与或,3(0011)与非1(0001)= 14(1110);
当Choice为6(110)时,或非,3(0011)或非1(0001)= 12(1100);
当Choice为7(111)时,异或,3(0011)异或1(0001)= 2(0010)。

下面给出加减法模块的设计图:
设计说明:
1)当/choice为低时(选中该模块),二路选择器选中其in_B端的输入,否则,二路选择器选中其in_A端的输入(接地),即加法器的输出结果为0000 + 1111(未选中时sub//add为高) + 1(sub//add为高故sub_in为高即Cin为高) = 0000 。

2)当选中该模块做减法时,sub//add端为高,如图对数据B再作为加法器的一个操作数,sub_in端为高(该输出在串联两个4位ALU是接回低位的ALU的Cin端,即相当于做减法时加一);
下面给出上图的4位2路选择器的设计图:
设计说明:
1)当A//B端为高时输出输入端in_A的数据,当A//B端为低时输出输入端in_B的数据。

下面给出加减法模块中的4位加法器的设计图:
设计说明:
1)整个加法器由四个全加器串联和一个先行进位端组成;
2)最上面的是先行进位器,其通过3级门电路便可输出结果,而最高位(S[3])的Cout则需要8级门电路,当串联时其能提高其上一个加法器的Cin端的输入。

其中的先行进位端具体设计图如下:
设计说明:
求出两个操作数各个位上的两个数的与G[n](即两个数都为1)、异或P[n](即两个数中有一个为1);则第四位的进位为:Cout = G[4]⊕P[4]G[3]⊕P[4]P[3]G[2]⊕P[4]P[3]P[2]G[1]⊕P[4]P[3]P[2]P[1]Cin
硬件验证:
使用DE-2板上的3个拨码开关要来设置当前ALU的运算功能,再由8个拨码开关给定数据A和数据B,由按键KEY[0]手动提供脉冲;第四个脉冲后观看输出结果是否正确。

相关文档
最新文档