VHDL流水线加法器
vhdl加法计数器
6、编写一个4位加法计数器VHDL源程序,要求:复位信号reset低电平清零,变高后在clk上升沿开始工作,输入时钟信号为clk,输出为q。
(以十二进制为例)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter ISPORT(clk,reset:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY priorityencoderARCHITECTURE rtl OF counter ISSIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINq<=cout;PROCESS(clk,reset)ISBEGINIF(reset=’0’)THENcout<="0000";ELSIF(clk’EVENT AND clk=’1’)THENIF(cout="1011")THENcout<="0000"ELSEcout<=cout+’1’;END IF;END IF;END PROCESS;END ARCHITECTURE rtl;4位二进制并行加法器的源程序ADDER4B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B IS --4位二进制并行加法器PORT(CIN:IN STD_LOGIC;--低位进位A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--4位加数B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--4位被加数S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--4位和CONT:OUT STD_LOGIC);END ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL AA,BB:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINAA<='0'& A;--将4位加数矢量扩为5位,为进位提供空间BB<='0'& B;--将4位被加数矢量扩为5位,为进位提供空间SINT<=AA+BB+CIN ;S<=SINT(3 DOWNTO 0);CONT<=SINT(4);END ART;8位二进制加法器的源程序ADDER8B.VHDLIBRARY IEEE;USE IEEE_STD.LOGIC_1164.ALL;USE IEEE_STD.LOGIC_UNSIGNED.ALL:ENTITY ADDER8B IS--由4位二进制并行加法器级联而成的8位二进制加法器PORT(CIN:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT:OUT STD_LOGIC);END ADDER8B;ARCHICTURE ART OF ADDER8B ISCOMPONENET ADDER4B--对要调用的元件ADDER4B的界面端口进行定义PORT(CIN:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CONT:OUT STD_LOGIC);END COMPONENT ;SIGNAL CARRY_OUT:STD_LOGIC;--4位加法器的进位标志BEGINU1:ADDER4B --例化(安装)一个4位二进制加法器U1PORT MAP(CIN=>CIN,A=>A(3 DOWNTO 0),B=>B(3DOWNTO0),S=>S(3 DOWNTO 0),COUT=>CARRY_OUT);U2:ADDER4B --例化(安装)一个4位二进制加法器U2PORT MAP(CIN=>CARRY_OUT,A=>A(7 DOWNTO 4),B=>B(7 DOWNTO 4),S=>S (7 DOWNTO 4);CONT=>CONT);END ART;六进制计数器的源程序CNT6.VHD(十进制计数器的源程序CNT10.VHD与此类似)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT6 ISPORT (CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC );END CNT6;ARCHITECTURE ART OF CNT6 ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK,CLR,ENA)BEGINIF CLR='1' THEN CQI<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENIF CQI=“0101” THEN CQI<=“0000”;ELSE CQI<=CQI+'1';END IF;END IF;END IF;END PROCESS;PROCESS(CQI)BEGINIF CQI=“0000” THEN CARRY_OUT<='1';ELSE CARRY_OUT<='0';END IF;END PROCESS;CQ<=CQI;END ART;十进制计数器LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count10 ISPORT(clk: IN STD_LOGIC;seg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END count10;ARCHITECTURE a1 OF count10 ISsignal sec: STD_LOGIC; signal q : STD_LOGIC_VECTOR(21 DOWNTO 0);signal num: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINprocess(clk) ----get 1 hz clock pulsebeginif clk'event and clk='1' then q<=q+1; end if;sec<=q(21); --get 1 hz clock pulseend process;timing: process(sec) beginif sec'event and sec='1' thenif num<9 then num<=num+1; else num<="0000"; end if;end if;end process;B1: block --bcd-7segsBegin --gfedcbaseg<= "0111111" when num=0 else"0000110" when num=1 else"1011011" when num=2 else"1001111" when num=3 else"1100110" when num=4 else"1101101" when num=5 else"1111101" when num=6 else"0000111" when num=7 else"1111111" when num=8 else"1101111" when num=9 else"0000000";end block;END a1;四位全加器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity add isport(a,b:in std_logic_vector(3 downto 0);cin:in std_logic;s:out std_logic_vector(3 downto 0);cout:out std_logic);end add;architecture beh of add isbeginprocess(a,b,cin)ariable x:std_logic_vector(3 downto 0);variable m,n,l:integer;beginm:=conv_integer(a);n:=conv_integer(b);l:=m+n+conv_integer(cin);x:=conv_std_logic_vector(l,4);s<=x(3 downto 0);cout<=x(3);end process;end beh;10位计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT ( CLK ,clr : IN STD_LOGIC ;CQ : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 ));END ENTITY CNT10;ARCHITECTURE ONE OF CNT10 ISBEGINPROCESS ( CLK , clr )V ARIABLE LCQ : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ); BEGINIF RST = …1‟ THEN LCQ := “0000”;ELSIF CLK‟EVENT AND CLK = …1‟ THENIF LCQ < 9 THEN LCQ := LCQ + 1;ELSE LCQ := “0000” ;END IF; END IF;CQ <= LCQ ;END PROCESS;END ARCHITECTURE ONE;八位串行二进制全加器use ieee.std_logic_1164.all;entity product_adder_subtracter isport(a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(8 downto 0));end;architecture behavioral of product_adder_subtracter isbeginbehavior:process(a,b) isvariable carry_in:std_logic;variable carry_out:std_logic;variable op2:std_logic_vector(b'range);beginop2:=b;end if;for index in 0 to 7 loopcarry_in:=carry_out;s(index)<=a(index) xor op2(index)xor carry_in ;carry_out:=(a(index)and op2(index))or(carry_in and (a(index) xor op2(index)));end loop;s(8)<=a(7) xor op2(7) xor carry_out;end process;end;8、根据已给出全加器VHDL程序,试写出一个四位逐位进位加法器的VHDL源程序。
vhdl通用十进制加法器
湖南人文科技学院课程设计报告课程名称:VHDL语言与EDA课程设计设计题目:通用十进制加法器系别:通信与控制工程系专业:电子信息工程班级:学生姓名:学号:起止日期:指导教师:教研室主任:指导教师评语:指导教师签名:年月日成绩评定项目权重成绩1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总成绩教研室审核意见:教研室主任签字:年月日教学系审核意见:主任签字:年月日摘要随着科技的发展,通用十进制加法器的应用已广泛融入到现实生活中。
EDA 技术的应用引起电子产品及系统开发的革命性变革。
本文采用EDA技术设计,并以VHDL语言为基础制作的通用十进制加法器。
该系统借助于强大的EDA工具和硬件描述语言可实现两个一位以上的十进制数的加法,在输入两个十进制数之后,给出两个数的相加结果。
本设计充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,提高了设计的效率。
设计主要步骤:首先利用QUARTUS‖来编辑、编译、仿真各个模块;然后以原理图为顶层文件建立工程,再进行引脚锁定、编译、下载,最后采用杭州康芯电子有限公司生产的GW48系列/SOPC/EDA实验开发系统,进行硬件测试。
关键词:通用十进制加法器;EDA技术;VHDL语言; QUARTUS‖目录设计要求 (1)1、方案论证与对比 (1)1.1方案一 (1)1.2方案二 (1)1.3 方案的对比与选择 (2)2、设计原理 (2)3、通用十进制加法器的主要硬件模块 (3)3.1 4位BCD码全加器模块 (3)3.2八加法器的实现框图 (3)4、调试与操作 (4)4.1通用十进制加法器的功能仿真 (4)4.2模式选择与引脚锁定 (4)4.2.1模式选择 (4)4.2.2引脚锁定 (5)4.3设备与器件明细表 (6)4.4调试 (6)4.4.1软件调试 (6)4.4.2硬件调试 (6)5、总结与致谢 (7)5.1总结与思考 (7)5.2致谢 (7)附录 (8)附录一 (8)附录二 (9)参考文献 (11)通用十进制加法器设计要求1、用VHDL 硬件描述语言设计4位的BCD 码全加器;2、以4位BCD 码全加器为模块设计两位十进制数的加法。
(商务智能)数字逻辑电路课程设计模加法器VHDL实现(含完整
电子科技大学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA数字逻辑设计实验报告实验题目: 4bit模9加法器学生姓名:指导老师:一、实验内容设计一个4bit模9加法器。
输入为两个4bit的二进制数,输出为两数相加后模9的结果。
其数学表达式为:y=(x1+x2)mod 9。
二、实验要求1、功能性要求:能够实现4bit无符号数的模9加法运算,即输入两个4比特数据时能够正确输出其相加并模9运算结果。
2、算法要求:模加法器有多种算法,可采用任意算法进行设计。
3、设计性要求:采用全加器、半加器和基本门结构化描述。
能够编写Test Bench文件,并利用Modelsim进行仿真。
在Modelsim仿真正确的基础上,能够生成bit文件并上板验证其正确性。
4、基本上板要求:在上板实验时,输入的两个4bit数采用拨码开关输入,输出采用LED灯进行显示。
三、设计思路1、整体思路:为了实现4bit无符号数的模9加法运算,可以先将两个4bit的加数a和b 先分别模9,相加之后再模9得到最终结果。
2、模9器:先找出读入的5bit数与模9后的4bit数之间的关系,画出卡诺图,再根据卡诺图得出其相应的逻辑表达式即可。
设读入的5bit数为carry、a、b、c、d,模9后得到的4bit数为w、x、y、z。
则化简后得到的逻辑表达式分别为:w = carry’ab’c’d’,x= carry’bc + carry’a’b + carry’bd + carrya’b’c’d’,y = carry’a’c + carry’cd + carry’abc’d’ + carrya’b’c’d’,z= carry’a’d + carry’acd’ + carry’abd’ + carry a’b’c’d’。
3、全加器:全加器可以实现两个1bit数a、b和进位输入cin的相加,其真值表如下所示:这里全加器由半加器和或门构成,其原理图如下:4、半加器:半加器是全加器的基本组成单元,可以实现两个1bit数a和b的相加,并将进位输出,其真值表如下:半加器由一个异或门和一个与门构成,其原理图如下所示:5、数码管显示:单个数码管一共有7个端(不含小数点),用来表示组成一个数字的7个部分,故只要找到这7个段和模9后的4bit数间的对应关系,将其画出卡诺图并化简成逻辑表达式即可。
VHDL加法器设计1
VHDL 加法器设计设计要求:采用QuartusII 集成开发环境利用VHDL 硬件描述语言设计传播进位加法器,直接进位加法器,线形进位加法器,平方根进位加法器,并比较这四种加法器的性能。
为了便于比较性能,将四种加法器都设定为28位。
一、全加器设计全加器是上述四种加法器的基础部件,首先应当设计一位全加器。
设计原理:i i i iS ABC ABC ABC ABC A B C=+++=⊕⊕0i i C AB BC AC =++VHDL 程序:仿真结果:--一位全加器设计library ieee;use ieee.std_logic_1164.all; entity fulladd isport ( A: in std_logic;B: in std_logic; cin:in std_logic; sumbit:out std_logic; cout:out std_logic );end fulladd;architecture behav of fulladd is beginsumbit<=(A xor B) xor cin;cout<=(a and b) or (cin and a) or (cin and b); end behav;二、传播进位加法器设计实际上加法器就是是全加器的级联,其中的每个FA网络为一个全加器(采用上文所述的全加器)VHDL代码:--传播进位加法器library ieee;use ieee.std_logic_1164.all;use work.all;entity carry_propogate_adder isport (A: in std_logic_vector(27 downto 0);B: in std_logic_vector(27 downto 0);cin:in std_logic;sum:out std_logic_vector(27 downto 0);cout:out std_logic);end carry_propogate_adder;architecture behav of carry_propogate_adder issignal ct:std_logic_vector(28 downto 0);component fulladd isport (A: in std_logic;B: in std_logic;cin:in std_logic;sumbit:out std_logic;cout:out std_logic);end component;beginct(0)<=cin;cout<=ct(28);G1: for i in 0 to 27 generatel1:fulladd port map (A(i),B(i),ct(i),sum(i),ct(i+1));end generate G1;end behav;功能仿真:延时测定:由图中的两个时间bar 的差值可看出,sum 值和cout 值几乎同时计算出,其Tdelay=28.332ns (cin 无关)三、直接进位加法器设计 设计原理:首先将AB 输入转换为PG 输入,若每级的P 输入都是‘1’则直接将Ci 传给Co ,否则像传播进位加法器一样计算其AB-PG 转换网络原理:Fa 全加器原理:P A B G AB=⊕=o i iC G PC S P C =+=⊕VHDL 代码:-- FA 子单元 library ieee;use ieee.std_logic_1164.all;entity Fa isport (Pi,Gi,Ci:in std_logic; Coi,Si:out std_logic); end Fa;architecture Fabehav of Fa is beginCoi<=Gi or (Pi and Ci);Si<=Pi xor Ci; end Fabehav; --ABtoPG 转换网络 library ieee;use ieee.std_logic_1164.all;entity PGNet isport(Ai,Bi:in std_logic; Pi,Gi:out std_logic); end PGNet;architecture PGbehav of PGNet is beginPi<=Ai xor Bi;Gi<=Ai and Bi; end PGbehav; --传播进位加法器 library ieee;use ieee.std_logic_1164.all; entity bypass_adder is port(A,B:in std_logic_vector(27 downto 0); Ci:in std_logic; Sum:out std_logic_vector(27 downto 0); Co:out std_logic );end bypass_adder;architecture adderbehav of bypass_adder is component Fa is port (Pi,Gi,Ci:in std_logic; Coi,Si:out std_logic ); end component; component PGNet is port(Ai,Bi:in std_logic; Pi,Gi:out std_logic ); end component;signal P,G:std_logic_vector(27 downto 0); signal C:std_logic_vector(28 downto 0); signal BP:std_logic; begin C(0)<=Ci; G1: for i in 0 to 27 generate l1: PGNet port map(A(i),B(i),P(i),G(i)); end generate G1; G2: for i in 0 to 27 generate l2:Fa port map (P(i),G(i),C(i),C(i+1),Sum(i)); end generate G2; BP<='1' when P="11111111111111111111111111111111" else '0'; Co<=Ci when BP='1' else C(8); end adderbehav;功能仿真:延时仿真:当通过直接进位网络(图中testp值全部为1时),进位信号有一定提前,但由于计算所有的P值本身也需要一定时间,所以改善并不明显。
vhdl全加器实验报告
vhdl全加器实验报告VHDL全加器实验报告引言:在数字电路设计领域,全加器是一种基本的逻辑电路。
它用于将两个二进制数相加,并产生相应的和与进位输出。
在本次实验中,我们将使用VHDL语言设计和模拟一个全加器电路,并通过实验验证其功能和正确性。
一、实验目的本实验的目的是通过设计和模拟一个VHDL全加器电路,加深对数字电路和VHDL语言的理解。
具体目标如下:1. 学习并掌握全加器的原理和电路结构;2. 掌握VHDL语言的基本语法和使用方法;3. 设计和模拟一个全加器电路,并验证其正确性;4. 分析和评估全加器电路的性能和优化方法。
二、全加器的原理和电路结构全加器是一种用于二进制加法的逻辑电路。
它接受两个输入位和一个进位输入位,并产生一个和输出位和一个进位输出位。
全加器的电路结构通常由两个半加器和一个或门组成。
半加器用于计算两个输入位的和,而或门用于计算进位输出位。
三、VHDL语言的基本语法和使用方法VHDL是一种硬件描述语言,用于描述和模拟数字电路。
它具有丰富的语法和功能,可以方便地进行电路设计和仿真。
VHDL语言的基本语法包括实体声明、端口声明、信号声明、过程声明等。
在本次实验中,我们将使用VHDL语言来描述和模拟全加器电路。
四、全加器电路的设计和模拟在本次实验中,我们将使用VHDL语言设计和模拟一个4位全加器电路。
首先,我们需要定义输入和输出信号,并声明全加器的实体和端口。
接下来,我们可以使用VHDL语言描述全加器的逻辑电路,包括半加器和或门的连接关系。
最后,我们可以使用仿真工具对全加器电路进行模拟,并观察输出结果。
五、全加器电路的验证和性能评估在模拟过程中,我们可以通过输入不同的二进制数来验证全加器电路的正确性。
我们可以逐个比较输入和输出的二进制数,并检查和进位输出是否与预期结果一致。
如果全加器电路能够正确地计算和输出结果,则说明设计和模拟过程是正确的。
此外,我们还可以评估全加器电路的性能和优化方法。
vhdl加法器二位BCD码加法器的VHDL源程序如下
vhdl加法器二位BCD码加法器的VHDL源程序如下导读:就爱阅读网友为您分享以下“二位BCD码加法器的VHDL源程序如下”资讯,希望对您有所帮助,感谢您对的支持!二位BCD码加法器的VHDL源程序如下:ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bcdadd is ---------------------实体部分port(key:in std_logic;---------------定义key输入口a0,a1,b0,b1:in integer range 0 to 9; -----定义两个加数的输入口a0l,a1l,b0l,b1l,s0l,s1l,s2l:out std_logic_vector(6 downto 0);----定义七个输出数码管s:out std_logic);----定义Key指示灯输出口end;architecture one of bcdadd is ----------结构体部分signal one:integer range 0 to 18; ----定义两个数的个位相加之后的信号signal ten:integer range 0 to 19; -----定义两个数的十位相加之后的信号signal co1,co2:integer range 0 to 1; ----定义个位和十位的进位信号signal s0,s1:integer range 0 to 15;beginp1:process(one,ten,a0,b0,a1,b1,co1)----第一个进程,进行加运算beginone<=a0+b0; --------------------个位相加之和if one>9 then --------------------和大于9,进位为1 co1<=1;s0<=one-10; -----------------------个位的值else -----------------------和小于9,进位为0co1<=0;s0<=one; -------------------------个位的值end if;ten<=a1+b1+co1;----------------------十位相加值和,加数包括个位来的进位if ten>9 then -------------------和大于9,进位为1co2<=1;s1<=ten-10;-------------------十位的值else ----------------------------------和小于9,进位为0co2<=0;s1<=ten;-----------------------十位的值end if;end process p1;p2:process(a0,a1,b0,b1) ----------第二个进程,两个加数的输出数码管显示译码begincase a0 is ----------------------被加数的个位显示译码when 0=>a0l<=“1000000”;when 1=>a0l<=“1111001”;when 2=>a0l<=“0100100”;when 3=>a0l<=“0110000”;when 4=>a0l<=“0011001”;第1页共4页when 5=>a0l<=“0010010”; when 6=>a0l<=“0000010”; when 7=>a0l<=“1111000”; when 8=>a0l<=“0000000”; whenothers=>a0l<=“ZZZZZZZ”; end case; case a1 is ------------------------------被加数的十位显示译码when 0=>a1l<=“1000000”; when 1=>a1l<=“1111001”; when 2=>a1l<=“0100100”; when 3=>a1l<=“0110000”; when 4=>a1l<=“0011001”; when 5=>a1l<=“0010010”; when 6=>a1l<=“0000010”; when 7=>a1l<=“1111000”; when 8=>a1l<=“0000000”; when 9=>a1l<=“0010000”; when others=>a1l<=“ZZZZZZZ”; end case; case b0 is-----------------------------加数的个位显示译码when 0=>b0l<=“1000000”; when 1=>b0l<=“1111001”; when 2=>b0l<=“0100100”; when 3=>b0l<=“0110000”; when 4=>b0l<=“0011001”; when 5=>b0l<=“0010010”; when 6=>b0l<=“0000010”; when8=>b0l<=“0000000”; when 9=>b0l<=“0010000”; when others=>b0l<=“ZZZZZZZ”; end case; case b1 is ----------------------------加数的十位显示译码when 0=>b1l<=“1000000”; when 1=>b1l<=“1111001”; when 2=>b1l<=“0100100”; when 3=>b1l<=“0110000”; when 4=>b1l<=“0011001”; when 5=>b1l<=“0010010”; when 6=>b1l<=“0000010”; when 7=>b1l<=“1111000”; when 8=>b1l<=“0000000”; when 9=>b1l<=“0010000”; when others=>b1l<=“ZZZZZZZ”;第2页共4页end case;end process p2;p3:process(key,s0,s1,co2,a0,a1,b0,b1) --------第三个进程,和的显示译码以及输入大于9是的出beginif key=…0‟ or a0>9 or b0>9 o r a1>9 or b1>9 then --当key等于0或者两个输入中的任何一个位大于9,和的数码显示均为“Z”状态s0l<=“ZZZZZZZ”;s1l<=“ZZZZZZZ”;s2l<=“ZZZZZZZ”;elsecase s0 is-------------------------------和的个位显示译码when 0=>s0l<=“1000000”;when 1=>s0l<=“1111001”;when 2=>s0l<=“0100100”;when 3=>s0l<=“0110000”;when 4=>s0l<=“0011001”;when 5=>s0l<=“0010010”;when 6=>s0l<=“0000010”;when 7=>s0l<=“1111000”;when 8=>s0l<=“0000000”;when 9=>s0l<=“0010000”;wh en others=>s0l<=“ZZZZZZZ”; end case;case s1 is--------------------------------和的十位显示译码when 0=>s1l<=“1000000”;when 1=>s1l<=“1111001”;when 2=>s1l<=“0100100”;when 3=>s1l<=“0110000”;when 4=>s1l<=“0011001”;when 5=>s1l<=“0010010”;when 6=>s1l<=“0000010”;when 7=>s1l<=“1111000”;when 8=>s1l<=“0000000”;when 9=>s1l<=“0010000”;when others=>s1l<=“ZZZZZZZ”; end case;case co2 is --------------------------和的百位显示译码when 0=>s2l<=“1000000”;when 1=>s2l<=“1111001”;end case;end if;end process p3;第3页共4页p4:process(key) -------------第四个进程,设置key的指示灯beginif key=…1‟ then s<=…1‟ ; else s<=…0‟;end if;end process p4;end;第4页共4页百度搜索“就爱阅读”,专业资料,生活学习,尽在就爱阅读网,您的在线图书馆。
maxplus2 cpld vhdl 流水灯的设计 十进制加法计数器的设计 奇偶校验电路的
实验六流水灯的设计(文本输入方式)[实验目的]1.学习设计一个流水灯程序,并在实验板上验证;2.学习使用VHDL语言进行逻辑设计输入;3.学习设计仿真工具的使用方法;[实验说明]该流水灯除了输入有:时钟端、使能端和清零端,输出为8个led指示灯。
清零端为低电平时回到最初始状态,输出为O1灯亮,为高电平时无作用;使能端低电平时流水灯停止,高电平时流水灯继续流动;时钟端为系统时钟输入,要求8个led指示灯每秒变化一次,向右流动,变化顺序依次为O1灯亮→O2灯亮→O3灯亮→ O4灯亮→ O5灯亮→ O6灯亮→ O7灯亮→返回O1。
电路逻辑功能实现后,可将该逻辑功能下载到CPLD中。
注意选择:清零端选1脚,使能端选拨码开关,时钟端选83脚、输出线8根(接发光二极管指示[实验要求]1用VHDL语言实现流水灯2设计仿真文件,进行软件验证3通过下载线下载到实验板上进行验证4若初始状态为O8灯亮,流水灯向左流动,试重新设计并下载验证[实验报告要求]1写出VHDL编程语言源文件2给出软件仿真和硬件测试结果3通过下载线下载到实验板上进行验证4写出学习总结参考程序见下页:library ieee;use ieee.std_logic_1164.all;entity liushuideng isport(ena,clk_in,clr: in std_logic;y: out std_logic_vector(7 downto 0));end liushuideng;architecture a of liushuideng issignal clk: std_logic;beginclock:process(clk_in) --输入的时钟为4Mvariable clock_buffer:std_logic; ----定义一个标准逻辑变量clock_buffervariable count_time:integer range 0 to 1999999; ---定义一个整型变量count_time beginif clk_in'event and clk_in='1' thenif count_time=1999999 thencount_time:=0;clock_buffer:=not clock_buffer; --每计2M次数时翻转一次elsecount_time:=count_time+1;end if;end if;clk<=clock_buffer; --输出的时钟为1HZend process;process(clr,clk,ena)variable q: std_logic_vector(7 downto 0); ----定义一个标准逻辑矢量的变量qbeginif(clr='0')thenq:="11111110"; ----按下清零键让它回到O1灯亮elseif clk'event and clk='1' then ---时钟的上升沿if ena='1' then ---ena为高开始移位,ena为低停止移位q:=q(6 downto 0)&q(7); --向右移动移位end if;end if;end if;y<=q;end process;end a;实验七十进制加法计数器的设计(文本输入方式)[实验目的]1.学习设计一个十进制加法计数器程序,并在实验板上验证;2.熟练掌握VHDL语言进行逻辑设计输入;3.学习设计仿真工具的使用方法;[实验说明]该计数器输入有:时钟端、使能端和清零端,输出为1个数码管。
上海大学 Verilog 设计 32位浮点加法器设计
32位浮点加法器设计摘要:浮点数具有数值范围大,表示格式不受限制的特点,因此浮点数的应用是非常广泛的。
浮点数加法运算比较复杂,算法很多,但是为了提高运算速度,大部分均是基于流水线的设计结构。
本文介绍了基于IEE754标准的用Verilog语言设计的32位浮点加法器,能够实现32位浮点数的加法运算。
虽然未采用流水线的设计结构但是仍然对流水线结构做了比较详细的介绍。
关键字:浮点数,流水线,32位浮点数加法运算,Verilog语言设计32-bit floating point adder designCao Chi,Shen Jia- qi,Zheng Yun-jia(School of Mechatronic Engineering and Automation, Shanghai University, Shanghai ,China) Abstract://沈佳琪搞定Key words:float; Assembly line; 32-bit floating-point adder浮点数的应用非常广泛,无论是在计算机还是微处理器中都离不开浮点数。
但是浮点数的加法运算规则比较复杂不易理解掌握,而且按照传统的运算方法,运算速度较慢。
因此,浮点加法器的设计采用了流水线的设计方法。
32位浮点数运算的摄入处理采用了IEE754标准的“0舍1入”法。
1.浮点数的介绍在处理器中,数据不仅有符号,而且经常含有小数,即既有整数部分又有小数部分。
根据小数点位置是否固定,数的表示方法分为定点表示和浮点表示。
浮点数就是用浮点表示法表示的实数。
浮点数扩大了数的表示范围和精度。
浮点数由阶符、阶码E、数符、尾数N构成。
任意一个二进制数N总可以表示成如下形式:N=±M×2±E。
通常规定:二进制浮点数,其尾数数字部分原码的最高位为1,叫作规格化表示法。
因此,扩大数的表示范围,就增加阶码的位数,要提高精度,就增加尾数的位数。
vhdl全加器实验报告
vhdl全加器实验报告VHDL全加器实验报告引言:在现代计算机科学中,加法运算是基本而重要的运算之一。
全加器是一种用于实现二进制加法的电路。
本次实验旨在使用VHDL语言设计和实现一个全加器电路,并通过仿真和测试验证其正确性和可行性。
一、全加器的原理和设计思路全加器是由两个半加器和一个额外的输入信号组成的电路。
它的输入包括两个二进制数位的输入信号A和B,以及一个来自上一位的进位信号Cin。
输出包括一个和位输出信号S和一个进位输出信号Cout。
全加器的真值表如下:A B Cin S Cout0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1根据全加器的真值表,我们可以得到以下逻辑表达式:S = A ⊕ B ⊕ CinCout = (A ∧ B) ∨ (Cin ∧ (A ⊕ B))基于以上原理和逻辑表达式,我们可以使用VHDL语言来实现全加器电路。
二、VHDL全加器电路的设计和实现1. 实体声明:首先,我们需要在VHDL代码中声明全加器的输入和输出信号。
代码如下:entity FullAdder isport (A, B, Cin: in std_logic;S, Cout: out std_logic);end FullAdder;2. 架构实现:接下来,我们需要在VHDL代码中实现全加器的逻辑功能。
代码如下:architecture behavior of FullAdder isbeginS <= A xor B xor Cin;Cout <= (A and B) or (Cin and (A xor B));end behavior;三、VHDL全加器电路的仿真和测试1. 仿真环境的搭建:为了验证全加器电路的正确性,我们需要使用VHDL仿真工具进行电路的仿真。
这里我们使用ModelSim进行仿真。
VHDL加法器
VHDL加法器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY F_ADDER ISPORT(ain,bin,cin:IN STD_LOGIC;sum,cout:OUT STD_LOGIC);END ENTITY F_ADDER;ARCHITECTURE BEHAVIOR OF F_ADDER ISSIGNAL D:STD_LOGIC;BEGIND<=(ain XOR bin);sum<=cin XOR D;cout<=(cin AND D) OR (ain AND bin);END ARCHITECTURE BEHAVIOR;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8 ISPORT( a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);b:IN STD_LOGIC_VECTOR(7 DOWNTO 0);c:IN STD_LOGIC;s:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);co:OUT STD_LOGIC);END ENTITY ADDER8;ARCHITECTURE BEHAVIOR1 OF ADDER8 ISCOMPONENT F_ADDERPORT(ain,bin,cin:IN STD_LOGIC;sum,cout:OUT STD_LOGIC);END COMPONENT;--SIGNAL m:STD_LOGIC_VECT0R(7 DOWNTO 0);--SIGNAL s:STD_LOGIC_VECT0R(7 DOWNTO 0);SIGNAL wire: STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINwire(0)<=c;co<=wire(8);gen:FOR i IN 7 DOWNTO 0 GENERATEu1:F_ADDER PORT MAP(ain=>a(i),bin=>b(i),cin=>wire(i),cout=>wire(i+1),sum=>s(i) );END GENERATE gen;--u1:F_ADDER PORT MAP(ain=>a(0),bin=>b(0),cin=>c,cout=>d,sum=>s(0));--u2:F_ADDER PORT MAP(ain=>a(1),bin=>b(1),cin=>m(i),cout=>e,sum=>s(1));--u3:F_ADDER PORT MAP(ain=>a(2),bin=>b(2),cin=>m(i),cout=>f,sum=>s(2));--u4:F_ADDER PORT MAP(ain=>a(3),bin=>b(3),cin=>m(i),cout=>g,sum=>s(3));--u5:F_ADDER PORT MAP(ain=>a(4),bin=>b(4),cin=>m(i),cout=>h,sum=>s(4));--u6:F_ADDER PORT MAP(ain=>a(5),bin=>b(5),cin=>m(i),cout=>i,sum=>s(5)); --u7:F_ADDER PORT MAP(ain=>a(6),bin=>b(6),cin=>m(i),cout=>j,sum=>s(6)); --u8:F_ADDER PORT MAP(ain=>a(7),bin=>b(7),cin=>m(i),cout=>co,sum=>s(7)); --su<=s;END ARCHITECTURE BEHAVIOR1;。
用VHDL语言描述和实现乘法累加器设计
设计应完成的功能要求:(1)乘法累加器的结构如下图所示,5位的被乘数X和5位的乘数Y输入后,暂存在寄存器5位的寄存器A和B中,寄存器A和B的输出首先相乘,得到10位乘积,该乘积通过选择信号sel的控制,可以和10位寄存器C的输出相加,相加结果保存在寄存器C中,实现乘法累加功能;也可以通过sel选择全零和乘积相加,实现乘法功能。
寄存器C的输出也是系统输出Z。
:用VHDL语言描述和实现乘法累加器设计(2)要求乘法器和加法器都采用电路描述,不采用算法描述。
(3)要求寄存器A,B,C具有异步清零功能,全部寄存器采用相同的时钟和清零信号。
(4)设计的最终输出是设计报告。
设计报告的内容要求:(1)设计报告的格式采用标准的深圳大学设计报告格式(2)设计报告应包括该电路的总体结构图和主要功能模块组成图;(3)设计报告应根据总体结构图,说明VHDL代码编写的设计思路和基本原理;(4)设计报告应完成该电路的VHDL代码设计;(5)设计报告应完成该电路的VHDL仿真分析。
一、实验目的用VHDL语言描述和实现乘法累加器设计二、实验内容和步骤一.总体结构图设计思路和原理:首先,寄存器A、B、C具有异步清零功能,rest在clk之前调用,当复位信号rest 为1时,寄存器A、B、C复位,当rest为0时,并且在它们同一时钟clk的上升沿到来时,输出将等于输入,起到了数据锁存功能。
同时,寄存器的输出Z既是整个结果的输出,也可以被内部引用,因此在定义Z的端口时,把端口类型定义为buffer。
5位的被乘数X和5位的乘数Y输入后,暂存在寄存器5位的寄存器A和B中,通过寄存器A、B的寄存,能够让不同时到达的数据X和Y能够在同一时钟的控制下同时参与运算,寄存器A和B的输出分别为x_temp和y_temp,他们首先相乘,得到10位乘积mul,该乘积通过选择信号sel的控制,当sel为1时,acc=z,即乘积mul可以和10位寄存器C的输出相加,相加结果保存在寄存器C中,实现乘法累加功能;当sel为0时,acc为全零,即选择全零和乘积相加,实现乘法功能。
二位二进制加法器vhdl代码
二位二进制加法器vhdl代码
好的,为你找到一段二位二进制加法器的VHDL代码,希望对你有所帮助:
```vhdl
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity adder is
port (
A, B, Cin : in STD_LOGIC;
S, Cout : out STD_LOGIC
);
end adder;
architecture behavioral of adder is
begin
S <= ((A xor B) xor Cin);
Cout <= ((A xor B) AND Cin) OR (A AND B);
end behavioral;
```
这段代码是一个简单的二位二进制加法器的VHDL实现。
它使用了`IEEE.STD_LOGIC_1164`库中的`STD_LOGIC`数据类型来表示输入和输出信号。
`adder`实体定义了加法器的端口,包括两个二进制输入`A`和`B`,以及一个进位输入`Cin`,还有两个二进制输出`S`和`Cout`。
在`architecture behavioral`中,定义了加法器的行为。
`S <= ((A xor B) xor Cin)`语句实现了二进制数的加法运算,`Cout <= ((A xor B) AND Cin) OR (A AND B)`语句则实现了进位输出的计算。
请注意,这只是一个简单的示例,实际的二位二进制加法器可能需要考虑更多的细节和优化。
在实际应用中,你可能需要根据具体的需求进行修改和扩展。
vhdl 加法器
ADD4, 8, 164-, 8-, 16-Bit Cascadable Full Adders with Carry-In, Carry-Out, and OverflowAArchitectures SupportedADD4, ADD8, and ADD16 add two words and a carry-in (CI), producing a sum output and carry-out (CO) or overflow (OFL). ADD4 adds A3 – A0, B3 – B0, and CI producing the sum output S3 – S0 and CO (or OFL). ADD8 adds A7 – A0, B7 – B0, and CI, producing the sum output S7 – S0 and CO (or OFL). ADD16 adds A15 – A0, B15 – B0 and CI, producing the sum output S15 – S0 and CO (or OFL).Unsigned Binary Versus Twos ComplementADD4, ADD8, ADD16 can operate on either 4-, 8-, 16-bit unsigned binary numbers or 4-, 8-, 16-bit twos-complement numbers, respectively. If the inputs are interpreted as unsigned binary, the result can be interpreted as unsigned binary. If the inputs are interpreted as twos complement, the output can be interpreted as twos complement. The only functional difference between an unsigned binary operation and a twos-complement operation is how they determine when “overflow” occurs. Unsigned binary uses CO, while twos-complement uses OFL to determine when “overflow” occurs. To interpret the inputs as unsigned binary, follow the CO output. To interpret the inputs as twos complement, follow the OFL output.Unsigned Binary OperationFor unsigned binary operation, ADD4 can represent numbers between 0 and 15, inclusive; ADD8 between 0 and 255, inclusive; ADD16 between 0 and 65535, inclusive. CO is active (High) when the sum exceeds the bounds of the adder.OFL is ignored in unsigned binary operation.T wos-Complement OperationFor twos-complement operation, ADD4 can represent numbers between -8 and +7, inclusive; ADD8 between -128 and +127, inclusive; ADD16 between -32768 and +32767, inclusive. OFL is active (High) when the sum exceeds the bounds of the adder. CO is ignored in twos-complement operation.ADD4, 8, 16Spartan-II, Spartan-IIE No Spartan-3No Virtex, Virtex-ENo Virtex-II, Virtex-II Pro, Virtex-II Pro X NoXC9500, XC9500XV , XC9500XL Primitive CoolRunner XPLA3Primitive CoolRunner-IIPrimitiveADD8 Implementation Spartan-II, Spartan-IIE, Virtex, Virtex-E Libraries GuideADD8 Implementation Spartan-3, Virtex-II, Virtex-II Pro, Virtex-II Pro XADD4 Implementation XC9500/XV/XL, CoolRunner XPLA3, CoolRunner-II Libraries GuideADD8 Implementation XC9500/XV/XL, CoolRunner XPLA3, CoolRunner-II UsageThis design element is schematic or inference only -- no instantiation.VHDL Inference Code (ADD4)architecture Behavioral of ADD issignal sum: std_logic_vector(WIDTH-1 downto 0);signal zeros: std_logic_vector(WIDTH-1 downto 0) := (others => '0'); beginprocess (CI, A, B, sum)beginsum <= ('0' & A) + ('0' & B) + (zeros & CI);S <= sum(WIDTH-1 downto 0);CO <= sum(WIDTH);end process;end Behavioral;Verilog Inference Code (ADD4)always @ (A or B or CI)begin{CO,sum} <= A + B + CI;end Libraries Guide。
VHDL语言的位加法器的设计方案
基于 VHDL 语言的8位加法器的设计作者:吴中友(陕理工物理电子信息科学与技术专业07级1班,陕西汉中 723000)指导教师:蒋嫒[摘要]利用VHDL言语,实现两个4位并行进位加法器,然后将其级联成为一个8位加法器,再实现一个二进制转换成十进制动态显模块,以显示相加结果,并在仿真软MAX+plus II中进行仿真。
[关键词]VHDL、加法器、MAX+plus IIDesignof 8-bit Adder based on VHDLWu Zhongyou(Department of Physics,ShaanxiUniversity of Technology,Hanzhong,Shaanxi 723000)Tutor:Jiang YuanAbstract:using VHDL, and the road to achieve two 4-bit adder, and then cascade into an 8-bit adder, and then converted to decimal binary to achieve a dynamic explicit module to display the sum of the results, and the simulation software MAX + plus II for simulation.Key words VHDL, adder, MAX + plus II0.引言加法器是用来实现加法的器件,即它是产生数的和的装置。
加数和被加数为输入,和数与进位为输出的装置为半加器。
若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。
加法器常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用,是计算机进行算术逻辑运算的基本部件。
研究加法器的实现对于电子硬件设计及其的理论发展的认识和理解具有重要意义。
1.设计原理加法器是数字系统中的基本逻辑器件。
用VHDL语言设计流水操作
2 流水线设计
2. 1 流水线概述 流水线 ( P ip eline ) 处理由通常的流水作业法而
来, 它是指将待处理的任务分解为相互有关而又相 对独立的、 可以顺序执行的子任务。 也就是说整个处
Ξ 本文得到国家 863- 409 项目资助 ΞΞ 王宇红, 男, 29 岁, 硕士研究生, 工程师, 主要研究方向为D SP 开发、 FPGA 设计及实时图像处理算法研究及其实现 收稿日期: 2000- 05- 28
3 设计实例
二维离散余弦变换 ( 2D - DCT ) 用于图像压缩 可以获得较大的压缩比率, 故应用较为广泛。 应用中 一般先将图像分为 8×8 的子块, 作为输入数据与 8 ×8 的 DCT 变换矩阵相乘, 得到该图像子块的频率 成分。 仅一个子块的变换, 就各需要 4096 次加法和 乘法。由于 2D - DCT 的可分解性, 可用两次一维离 散余弦变换 ( 1D - DCT ) 完成: 先对行进行变换, 得 到过渡矩阵, 再对过渡矩阵的列进行变换就可得到 整个二维变换结果。 这样, 可以将运算量降低到原来 的四分之一。图 5 ( a ) 为 1D - DCT 的变换方程 (C 为 变换系数, X 为输入, Y 为输出) 。 实质上, 变换系数 只有 7 个不相同, 对 ( a ) 式再进行变化, 得到新的变 换等式, 如图 5 ( b ) 。
Us e VHDL fo r P ipe line D e s ig n ing
W ang Yuhong, et a l
N a tiona l U n iv ersity of D ef ense T echnology , A T R - 3 L ab, C hangS ha 410073
Abstract U sing V HDL language to design a circu it is becom ing pop u la r. A fter in t roducing
流水线乘法累加器EDA仿真
流水线乘法累加器EDA仿真Augusting1991(浙江XXXX XXXXXX,浙江XX xxxxxx)摘要:为了能更好的理解、掌握和应用EDA技术,并在EDA工具软件的平台上,读懂相应的硬件描述语言HDL,进行流水线乘法累加器的混合输入设计仿真实验。
在流水线乘法累加器电路中,用到包括16位加法器(ADDER16B)、8位锁存器(FF0)、8位乘法器(MULT8B),然后通过顶层的原理图设计建立MUILADD工程,进行工程的逻辑编译和仿真测试,得出相对于的仿真波形。
通过本次实验能基本掌握EDA技术,使用QUARTUS II软件进行硬件描述语言的电路设计,掌握实验的基本流程,为下一步在硬件平台上的测试,到最后到FPGA的最终开放打下基础。
关键词:EDA技术;累加器;QUARTUS II;HDL中图分类号: TN91文献标识码: A文章编号:The Design of Toy Car Wireless Remote Control System Based on ZigBeeLI Bing(College of Information Science and Technology, Zhejiang Shuren University, Hangzhou 310015,China)Abstract: In order to better understand, grasp and application of EDA technology, and in the EDA software platform, read the corresponding hardware description language HDL, are pipelined multiplication accumulator mixed input design simulation experiment. In a pipelined multiplication accumulator circuit, used includes16 bit adder ( ADDER16B ), the 8latch ( FF0),8 bit multiplier ( MULT8B ), and then through the top of the schematic design to establish MUILADD engineering, engineering logic compilation and simulation test, obtains relative to the simulation waveform. Through this experiment to master the basic technique of EDA, use the QUARTUS II software for hardware description language in the circuit design, to grasp the basic flow, for the next step in the hardware platform of testing, finally to the FPGA final open lay the foundation.Key words: EDA ;accumulator ;QUARTUS II; HDL;0 引言随着基于PLD的EDA技术的发展和应用领域的扩大与深入EDA技术在电子信息、通信、自动控制及计算机应用领域的重要性日益突出。
VHDL加法器与乘法器
串行进位加法器( 串行进位加法器(CRA) )
A0 B0 A1 B1 A2 B2 A3 B3
CI S
A
B CO
CI S
A
B CO
CI S
A
B CO
CI S
A
B CO
S0
S1
S2
S3
CO
设计方法:原理图、元件例化; 函数表达式
多位加法器设计
选择进位加法器( 选择进位加法器(CSLA) )
移位相加乘法器
BEGIN IF ST = '1' THEN -REGA := "00000000" & A; REGB := B; RESULT <= (OTHERS => '0'); SOUT <= '0'; REGRES := (OTHERS => '0'); CNT := (OTHERS => '0'); ELSIF CLK'EVENT AND CLK='1' THEN -IF REGB(0)='1' THEN -REGRES := REGRES + REGA; END IF; REGA(15 DOWNTO 1) := REGA(14 DOWNTO 0); -REGA(0):= '0'; -REGB(6 DOWNTO 0) := REGB(7 DOWNTO 1); -CNT := CNT + 1; -IF CNT="000" THEN -RESULT <= REGRES; -SOUT <= '1'; REGA := "00000000" & A; REGB := B;-REGRES := (OTHERS => '0'); -END IF; END IF; END PROCESS; END ARCHITECTURE; 初始化, 初始化,置位
VHDL流水线加法器
可编程实验报实验报告要求:1、任务的简单描述2、画出电路图3、写出源代码仿真结果分析和讨论4、1、3-8译码器源代码:LIBRARY ieee;USE dc38 ISP ORT(sei : in std_logic_vector(2 downto 0);y : out std_logic_vector(7 downto 0));END dc38;ARCHITECTURE behavior OF dc38 IS BEGINy <= "" WHEN sei = "000" else""WHEN sei = "001" else""WHEN sel = "010" else""WHEN sel = "011" else""WHEN sel = "100" else""WHEN sel = "101" else""WHEN sel = "110" else "01111111"WHEN sel = "111" else "ZZZZZZZZ";END behavior;仿真结果:一位全加器CI CO四级流水加法器library ieee; use adder isport(clk,rst : in std_logic;a,b : in std_logic_vector(3 dow nto 0); sum : outstd_logic_vector(3 dow nto 0); c : out std_logic); end en tity adder;architecture depict of adder issignal reg1: std_logic_vector(7 dow nto 0);signal reg2: std_logic_vector(6 dow nto 0);signal reg3: std_logic_vector(5 dow nto 0);beginbit0:process(clk,rst)beginif(rst='1') then reg1<="00000000";elsif(rising_edge(clk)) then reg1(0)<= a(0) xorb(0); reg1(1)<= a(0) and b(0); reg1(2)<= a(1);reg1(3)<= b(1); reg1(4)<= a(2); reg1(5)<=b(2); reg1(6)<= a(3); reg1(7)<= b(3);end if;end process bit0;bit1:process(clk,rst)beginif(rst='1') then reg2<="0000000";elsif(rising_edge(clk)) then reg2(0)<= reg1(0);reg2(1)<= reg1(1) xor reg1(2) xor reg1(3); reg2(2)<= (reg1(1) and reg1(3))or(reg1(2)and reg1(3));reg2(6 downto 3)<=reg1(7 downto 4);end if;end process bit1;bit2:process(clk,rst)beginif(rst='1') then reg3<="000000";elsif(rising_edge(clk)) thenreg3(1 downto 0)<=reg2(1 downto 0);reg3(2)<=reg2(2)xor reg2(3)xor reg2(4);reg3(3)<=(reg2(2)and reg2(3))or(reg2(2)and reg2(4));reg3(5 downto 4)<=reg2( 6 downto 5); end if;end process bit2; bit3:process(clk,rst)beginif(rst='1') thensum<="0000";reg1(2))or(reg1(1)and reg2(4))or(reg2(3)andc<='0';elsif(rising_edge(clk)) thensum(2 downto 0)<=reg3(2 downto 0);sum(3)<=reg3(3)xor reg3(4)xorreg3(5);c<=(reg3(3)andreg3(5))or(reg3(4)and reg3(4))or(reg3(3)andreg3(5));end if; end process bit3; end depict;library ieee; use noadd is port(clk,rst : in std_logic;a,b : in std_logic_vector(3 downto 0);sum : out std_logic_vector(3 downto 0);c : out std_logic);end entity noadd;architecture depict of noadd issignal reg : std_logic_vector(4 downto 0); signal rega:std_logic_vector(4 downto 0); signal regb:std_logic_vector(4 downto 0); beginprocess(clk)beginif(rising_edge(clk))thenrega<='0'& a;regb<='0'& b;end if;end process;process(clk)beginif(rst='1')thenreg<="00000";elsif(rising_edge(clk))then reg<=rega+regb;end if;end process; sum<=reg(3 downto 0); c<=reg(4); end depict;4位十进制数计数器library ieee;use dec_disp is port( clk_cnt : in std_logic; sel1 : out std_logic_vector(3 downto 0); sel2 : out std_logic_vector(3 downto 0); sel3 : out std_logic_vector(3 downto 0);sel4 : out std_logic_vector(3 downto 0));end dec_disp;architecture behav of dec_disp isbegincount:process(clk_cnt) beginif(rising_edge(clk_cnt))then if(data1="1001")then data1<="0000"; elseif(data2="1001")then data2<="0000"; data1<=data1+1; else if(data3="1001")then data3<="0000"; data2<=data2+1; elseif(data4="1001")then data4<="0000"; data3<=data3+1; elsedata4<=data4+1; end if; end if; end if; end if; end if;end process count; sel1<=data1; sel2<=data2; sel3<=data3; sel4<=data4; end behav;signal signal signal signal data1 data2 data3 data4std_logic_vector(3 downto 0); std_logic_vector(3 downto 0); std_logic_vector(3 downto 0); std_logic_vector(3 downto 0);正弦波发生器文件data_radix=dec; 1: 134; depth=256; content 2: 137; width=8; begin 3: 141; address_radix=dec; 0: 131; 4: 144;5: 147; 49:249; 93:223; 6: 150; 50:250; 94:221; 7: 153; 51:250; 95:219; 8: 156; 52:251; 96:216; 9: 159; 53:252; 97:214; 10: 162; 54:253; 98:212; 11: 165; 55:254; 99:209; 12: 168; 56:254; 100:207; 13: 171; 57:255; 101:204; 14: 174; 58:255; 102:202; 15: 177; 59:255; 103:199; 16: 180; 60:255; 104:196; 17: 183; 61:255; 105:194; 18: 186; 62:255; 106:191; 19: 188; 63:255; 107:188; 20: 191; 64:255; 108:186; 21: 194; 65:255; 109:183; 22: 196; 66:255; 110:180; 23: 199; 67:255; 111:177; 24: 202; 68:255; 112:174; 25: 204; 69:255; 113:171; 26: 207; 70:254; 114:168; 27: 209; 71:254; 115:165; 28: 212; 72:253; 116:162; 29: 214; 73:252; 117:159; 30: 216; 74:251; 118:156; 31!219; 75:250; 119:153; 32:221; 76:250; 120:150; 33:223; 77:249; 121:147; 34:225; 78:247; 122:144; 35:227; 79:246; 123:141; 36:229; 80:245; 124:137; 37:231; 81:244; 125:134; 38:233; 82:242; 126:131; 39:234; 83:241; 127:128; 40:236; 84:239; 128:125; 41:238; 85:238; 129:122; 42:239; 86:236; 130:119; 43:241; 87:234; 131:115; 44:242; 88:233; 132:112; 45:244; 89:231; 133:109; 46:245; 90:229; 134:106; 47:246; 91:227; 135:103; 48:247; 92:225; 136:10;137:97; 181:4; 225:42; 138:94; 182:3; 226:44; 139:91; 183:2; 227:47; 140:88; 184:2; 228:49; 141:85; 185:1; 229:52; 142:82; 186:1; 230:54; 143:79; 187:1; 231:57; 144:76; 188:0; 232:60; 145:73; 189:0; 233:62; 146:70; 190:0; 234:65; 147:68; 191:0; 235:68; 148:65; 192:0; 236:70 ; 149:62; 193:0; 237:73; 150:60; 194:0; 238:76; 151:57; 195:1; 239:79; 152:54; 196:1; 240:82; 153:52; 197:1; 241:85; 154:49; 198:2; 242:88; 155:47; 199:2; 243:91; 156:44; 200:3; 244:94; 157:42; 201:4; 245:97; 158:40; 202:5; 246:100; 159:37; 203:6; 247:103; 160:35; 204:6; 248:106; 161:33; 205:7; 249:109; 162:31; 206:9; 250:112; 163:29; 207:10; 251:115; 164:27; 208:11; 252:119; 165:25; 209:12; 253:122; 166:23; 210:14; 254:125; 167:22; 211:15; 255:128; 168:20; 212:17; end; 169:18; 213:18;170:17; 214:20;171:15; 215:22;172:14; 216:23;173:12; 217:25;174:11; 218:27;175:10; 219:29;176:9; 220:31;177:7; 221:33;178:6; 222:35;179:6; 223:37;180:5; 224:40;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可编程实验报告实验报告要求:1、任务的简单描述2、画出电路图3、写出源代码4、仿真结果5、分析和讨论1、3-8译码器源代码:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_signed.all;ENTITY dc38 ISPORT(sel : in std_logic_vector(2 downto 0);y : out std_logic_vector(7 downto 0)); END dc38;ARCHITECTURE behavior OF dc38 IS BEGINy <= "11111110" WHEN sel = "000" else "11111101" WHEN sel = "001" else"11111011" WHEN sel = "010" else"11110111" WHEN sel = "011" else"11101111" WHEN sel = "100" else"11011111" WHEN sel = "101" else"10111111" WHEN sel = "110" else"01111111" WHEN sel = "111" else"ZZZZZZZZ";END behavior;仿真结果:一位全加器A B CI S CO0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1四级流水加法器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity adder isport(clk,rst : in std_logic;a,b : in std_logic_vector(3 downto 0);sum : out std_logic_vector(3 downto 0);c : out std_logic);end entity adder;architecture depict of adder issignal reg1: std_logic_vector(7 downto 0);signal reg2: std_logic_vector(6 downto 0);signal reg3: std_logic_vector(5 downto 0);beginbit0:process(clk,rst)beginif(rst='1') thenreg1<="00000000";elsif(rising_edge(clk)) thenreg1(0)<= a(0) xor b(0);reg1(1)<= a(0) and b(0);reg1(2)<= a(1);reg1(3)<= b(1);reg1(4)<= a(2);reg1(5)<= b(2);reg1(6)<= a(3);reg1(7)<= b(3);end if;end process bit0;bit1:process(clk,rst)beginif(rst='1') thenreg2<="0000000";elsif(rising_edge(clk)) thenreg2(0)<= reg1(0);reg2(1)<= reg1(1) xor reg1(2) xor reg1(3);reg2(2)<= (reg1(1) and reg1(2))or(reg1(1)and reg1(3))or(reg1(2)and reg1(3));reg2(6 downto 3)<=reg1(7 downto 4);end if;end process bit1;bit2:process(clk,rst)beginif(rst='1') thenreg3<="000000";elsif(rising_edge(clk)) thenreg3(1 downto 0)<=reg2(1 downto 0);reg3(2)<=reg2(2)xor reg2(3)xor reg2(4);reg3(3)<=(reg2(2)and reg2(3))or(reg2(2)and reg2(4))or(reg2(3)and reg2(4));reg3(5 downto 4)<=reg2( 6 downto 5);end if;end process bit2;bit3:process(clk,rst)beginif(rst='1') thensum<="0000";c<='0';elsif(rising_edge(clk)) thensum(2 downto 0)<=reg3(2 downto 0);sum(3)<=reg3(3)xor reg3(4)xor reg3(5);c<=(reg3(3)and reg3(4))or(reg3(3)and reg3(5))or(reg3(4)and reg3(5));end if;end process bit3;end depict;library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;entity noadd isport(clk,rst : in std_logic;a,b : in std_logic_vector(3 downto 0);sum : out std_logic_vector(3 downto 0);c : out std_logic);end entity noadd;architecture depict of noadd issignal reg : std_logic_vector(4 downto 0);signal rega: std_logic_vector(4 downto 0);signal regb: std_logic_vector(4 downto 0);beginprocess(clk)beginif(rising_edge(clk))thenrega<='0'& a;regb<='0'& b;end if;end process;process(clk)beginif(rst='1')thenreg<="00000";elsif(rising_edge(clk))thenreg<=rega+regb;end if;end process;sum<=reg(3 downto 0);c<=reg(4);end depict;4位十进制数计数器library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity dec_disp is port( clk_cnt : in std_logic;sel1 : out std_logic_vector(3 downto 0);sel2 : out std_logic_vector(3 downto 0);sel3 : out std_logic_vector(3 downto 0);sel4 : out std_logic_vector(3 downto 0));end dec_disp;architecture behav of dec_disp issignal data1 : std_logic_vector(3 downto 0); signal data2 : std_logic_vector(3 downto 0); signal data3 : std_logic_vector(3 downto 0); signal data4 : std_logic_vector(3 downto 0);begincount:process(clk_cnt)beginif(rising_edge(clk_cnt))thenif(data1="1001")thendata1<="0000";elseif(data2="1001")thendata2<="0000";data1<=data1+1;elseif(data3="1001")thendata3<="0000";data2<=data2+1;elseif(data4="1001")thendata4<="0000";data3<=data3+1;elsedata4<=data4+1;end if;end if;end if;end if;end if;end process count;sel1<=data1;sel2<=data2;sel3<=data3;sel4<=data4;end behav;正弦波发生器sin.mif文件depth=256;width=8; address_radix=dec; data_radix=dec; contentbegin0: 131;1: 134;2: 137;3: 141;4: 144;5: 147;6: 150;7: 153;8: 156;9: 159;10: 162;11: 165;12: 168; 13: 171;14: 174;15: 177;16: 180;17: 183;18: 186;19: 188;20: 191;21: 194;22: 196;23: 199;24: 202;25: 204;26: 207;27: 209;28: 212;29: 214;30: 216;31!219;32:221;33:223;34:225;35:227;36:229;37:231;38:233;39:234;40:236;41:238;42:239;43:241;44:242;45:244;46:245;47:246;48:247;49:249;50:250;51:250;52:251;53:252; 54:253; 55:254; 56:254; 57:255; 58:255; 59:255; 60:255; 61:255; 62:255; 63:255; 64:255; 65:255; 66:255; 67:255; 68:255; 69:255; 70:254; 71:254; 72:253; 73:252; 74:251; 75:250; 76:250; 77:249; 78:247; 79:246; 80:245; 81:244; 82:242; 83:241; 84:239; 85:238; 86:236; 87:234; 88:233; 89:231; 90:229; 91:227; 92:225; 93:223; 94:221; 95:219; 96:216;97:214;98:212;99:209;100:207;101:204;102:202;103:199;104:196;105:194;106:191;107:188;108:186;109:183;110:180;111:177;112:174;113:171;114:168;115:165;116:162;117:159;118:156;119:153;120:150;121:147;122:144;123:141;124:137;125:134;126:131;127:128;128:125;129:122;130:119;131:115;132:112;133:109;134:106;135:103;136:10;137:97;138:94;139:91;140:88;141:85;142:82;143:79;144:76;145:73;146:70;147:68;148:65;149:62;150:60;151:57;152:54;153:52;154:49;155:47;156:44;157:42;158:40;159:37;160:35;161:33;162:31;163:29;164:27;165:25;166:23;167:22;168:20;169:18;170:17;171:15;172:14;173:12;174:11;175:10;176:9;177:7;178:6;179:6;180:5;181:4;182:3;183:2;184:2;185:1; 186:1; 187:1; 188:0; 189:0; 190:0; 191:0; 192:0; 193:0; 194:0; 195:1; 196:1; 197:1; 198:2; 199:2; 200:3; 201:4; 202:5; 203:6; 204:6; 205:7; 206:9; 207:10; 208:11; 209:12; 210:14; 211:15; 212:17; 213:18; 214:20; 215:22; 216:23; 217:25; 218:27; 219:29; 220:31; 221:33; 222:35; 223:37; 224:40; 225:42; 226:44; 227:47; 228:49; 229:52; 230:54; 231:57; 232:60; 233:62; 234:65; 235:68; 236:70 ; 237:73; 238:76; 239:79; 240:82; 241:85; 242:88; 243:91; 244:94; 245:97; 246:100; 247:103; 248:106; 249:109; 250:112; 251:115; 252:119; 253:122; 254:125; 255:128; end;。