




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3-3 给出一个4选1多路选择器的VHDL描述。选通控制端有四个输入:S0、S1、S2、S3。当且仅当S0=0时:Y=A;S1=0时:Y=B;S2=0时:Y=C;S3=0时:Y=D。-解:4选1多路选择器VHDL程序设计。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41a IS PORT( A,B,C,D : IN STD_LOGIC; S0,S1,S2,S3 : IN STD_LOGIC; Y : OUT STD_LOGIC); END ENTITY mux41a; ARCHITECTURE one OF mux41a IS SIGNAL S0_3 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN S0_3=S0&S1&S2&S3; y=A WHEN S0_3=0111 ELSE B WHEN S0_3=1011 ELSE C WHEN S0_3=1101 ELSE D WHEN S0_3=1110 ELSE Z; END ARCHITECTURE one;3-4 给出1位全减器的VHDL描述;最终实现8位全减器。要求:1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-20中h_suber是半减器,diff是输出差(diff=x-y),s_out是借位输出(s_out=1,xy),sub_in是借位输入。cyinxindiff_outba图3-19 1位全加器-解(1.1):实现1位半减器h_suber(diff=x-y;s_out=1,xy) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_suber IS PORT( x,y: IN STD_LOGIC; diff,s_out: OUT STD_LOGIC); END ENTITY h_suber; ARCHITECTURE hs1 OF h_suber IS BEGIN Diff = x XOR (NOT y); s_out xin,y=yin, diff=a, s_out=b); u2: h_suber PORT MAP(x=a, y=sub_in, diff=diff_out,s_out=c); sub_out x0,yin=y0,diff_out=diff0,sub_in=sin,sub_out=a0);u1:f_suber PORT MAP(xin=x1,yin=y1,diff_out=diff1,sub_in=a0,sub_out=a1);u2:f_suber PORT MAP(xin=x2,yin=y2,diff_out=diff2,sub_in=a1,sub_out=a2);u3:f_suber PORT MAP(xin=x3,yin=y3,diff_out=diff3,sub_in=a2,sub_out=a3);u4:f_suber PORT MAP(xin=x4,yin=y4,diff_out=diff4,sub_in=a3,sub_out=a4);u5:f_suber PORT MAP(xin=x5,yin=y5,diff_out=diff5,sub_in=a4,sub_out=a5);u6:f_suber PORT MAP(xin=x6,yin=y6,diff_out=diff6,sub_in=a5,sub_out=a6);u7:f_suber PORT MAP(xin=x7,yin=y7,diff_out=diff7,sub_in=a6,sub_out=sout);END ARCHITECTURE s8;3-8 设计一个求补码的程序,输入数据是一个有符号的8位二进制(原码)数。-解:5-9 设计一个求补码的程序,输入数据是一个有符号的8位二进制数。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY org_patch IS PORT( org_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0);-原码输入 patch_data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-补码输出 END org_patch; ARCHITECTURE BHV OF org_patch IS BEGIN PROCESS(org_data) BEGIN IF(org_data(7)=0) THEN patch_data=0,补码=原码。 else patch_data=org_data(7)&(not org_data(6 DOWNTO 0)+1;-org_data0,补码=|原码|取反+1。 END IF; END PROCESS; END BHV;310library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add isport(a:in std_logic_vector(7 downto 0); b:in std_logic_vector(7 downto 0); ci:in std_logic; co:out std_logic; count:out std_logic_vector(7 downto 0);end add;architecture bhv of add isbeginprocess(a,b,ci)variable data:std_logic_vector(1 downto 0);variable c:std_logic;beginc:=ci;for n in 0 to 7 loopdata:=(0&a(n)+(0&b(n)+(0&c);count(n)=data(0);c:=data(1);end loop;co=c;end process;end bhv;3-14 用循环语句设计一个7人投票表决器,及一个4位4输入最大数值检测电路。-解:5-7 用循环语句设计一个7人投票表决器,及一个4位4输出最大数值检测电路。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY vote_7 IS PORT( DIN: IN STD_LOGIC_VECTOR(6 DOWNTO 0);-7位表决输入(1:同意,0:不同意) G_4: OUT STD_LOGIC; -超过半数指示 CNTH: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);-表决结果统计数 END vote_7; ARCHITECTURE BHV OF vote_7 IS BEGIN PROCESS(DIN) VARIABLE Q: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN Q:=000; FOR n IN 0 TO 6 LOOP - n是LOOP的循环变量 IF(DIN(n)=1) THEN Q:=Q+1; END IF; END LOOP; CNTH=4 THEN G_4=1; ELSE G_40); -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN=1 THEN -检测是否允许计数或加载(同步使能) IF LOAD=0 THEN Q:=DATA; -允许加载 ELSE IF Q0); -大于等于9时,计数值清零 END IF; END IF; END IF; END IF; IF Q=9 THEN COUT=1; -计数大于9,输出进位信号 ELSE COUT=0; END IF; DOUT 0); -计数器异步复位 ELSIF LOAD = 1 THEN CQI:=DATA; -LS_LOAD:=0; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF ADD_EN=1THEN -检测是否允许计数(同步他能) IF CQI 0); -大于65535,计数值清零 END IF; IF CQI=16#FFFF# THEN COUT=1; -计数大于9,输出进位信号 ELSE COUT 0 THEN CQI:=CQI-1; -允许计数,检测是否小于65535 ELSE CQI:=(OTHERS = 1); -大于65535,计数值清零 END IF; IF CQI=0 THEN COUT=1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; END IF; END IF; CQ=CQI; -将计数值向端口输出 END PROCESS; END ARCHITECTURE A_S_16;5-9library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity m6 is port(clk,rst:in std_logic; q: out std_logic_vector(2 downto 0); end m6; architecture bhv of m6 is type states is(st0,st1,st2,st3,st4,st5); signal stx:states; begin process(clk) begin if rst=1 then stx=st0;qq=000;stxq=001;stxq=011;stxq=111;stxq=101;stxq=100;stx stx=st0; end case; end if; end process; end bhv;5-12 用同步时序电路对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。当5位输入中1的数目为奇数时,在最后一位的时刻输出1。-解:4-12 用同步时序电路对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。- 当5位输入中1的数目为奇数时,在最后一位的时刻输出1。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY odd_even_p_RXD_5 IS PORT(CLK,RST,S_in: IN STD_LOGIC;-CLK、RST、S_in:时钟、复位、串行输入数据 P_out: OUT STD_LOGIC_VECTOR(4 DOWNTO 0);-P_out:并行输出数据 o_e_out: OUT STD_LOGIC); -o_e_out:奇校验输出位 END ENTITY odd_even_p_RXD_5; ARCHITECTURE one OF odd_even_p_RXD_5 IS BEGIN PROCESS(CLK,RST) VARIABLE shift_Q : STD_LOGIC_VECTOR(4 DOWNTO 0);-shift_Q:移位寄存器 VARIABLE shift_cnt : STD_LOGIC_VECTOR(2 DOWNTO 0);-shift_cnt:移位计数器 BEGIN IF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF RST = 1 THEN shift_cnt:=100; -移位寄存器和计数器复位 ELSE IF shift_cnt=4 THEN -检测到接收5位串行输入数据 shift_cnt:=000; -移位计数器清零,为接收下一组数据做准备。 P_out=shift_Q;-接收数据并行输出 o_e_out=shift_Q(4) XOR shift_Q(3) XOR shift_Q(2) XOR shift_Q(1) XOR shift_Q(0);-奇校验输出 shift_Q:=S_in & shift_Q(4 DOWNTO 1);-采样移位串行输入 ELSE shift_cnt:=shift_cnt+1;-移位计数 shift_Q:=S_in & shift_Q(4 DOWNTO 1);-采样移位串行输入 END IF; END IF; END IF; END PROCESS; END ARCHITECTURE one;5-5 分频方法有多种,最简单的是二分频和偶数分频甚至奇数分频,这用触发器或指定计数模的计数器即可办到。但对于现场实现指定分频比或小数分频率的分频电路的设计就不是很简单了。 试对例3-20的设计稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起,构成一个自动加载型16位二进制数计数器,也即一个16位可控的分频器,给出其VHDL表述,并说明工作原理。设输入频率fi=4MHz,输出频率fo=516.51Hz(允许误差0.1Hz),16位加载数值是多少?-解:3-9 16位数控分频器(可进行奇偶数分频)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF16 IS PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(15 DOWNTO 0); FOUT : OUT STD_LOGIC);END ENTITY DVF16;ARCHITECTURE one OF DVF16 ISSIGNAL FULL : STD_LOGIC;BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN IF CLKEVENT AND CLK = 1 THEN IF CNT8 = 0000000000000000 THEN CNT8 := D-1;-当CNT8计数归0时,预置CNT8=D-1; -计数范围(D=n):n-1n/2取整(n=10:98765计数,前后半周期相同) FULL = 1;-同时使溢出标志信号FULL输出为高电平 -(n=11:1098765计数,前比后半周期多一个时钟) ELSIF CNT8 = (0 & D(15 DOWNTO 1) THEN CNT8 :=(0 & D(15 DOWNTO 1)-1;-当CNT8=n/2取整时,预置CNT8=D/2取整-1; -计数范围(D=n):n/2取整0(n=10:43210计数) FULL = 1; -同时使溢出标志信号FULL输出为高电平 (n=11:43210计数) ELSE CNT8 := CNT8 - 1; -否则继续作加1计数 FULL = 0; -且输出溢出标志信号FULL为低电平 END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULLEVENT AND FULL = 1 THEN CNT2 := NOT CNT2;-如果溢出标志信号FULL为高电平,D触发器输出取反 IF CNT2 = 1 THEN FOUT = 1; ELSE FOUT = 0; END IF; END IF; END PROCESS P_DIV;END ARCHITECTURE one;5-6 分别给出图3-20所示的六个RTL图的VHDL描述,注意其中的D触发器和锁存器的表述。图3-20 RTL图图3-20 RTL图(a)-解:实现图3-20(a)RTL图的VHDL程序t3_12_a.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_a IS PORT (CL,CLK0: IN STD_LOGIC; OUT1: OUT STD_LOGIC); END ENTITY t3_12_a; ARCHITECTURE sxdl OF t3_12_a IS -时序电路sxdl SIGNAL Q : STD_LOGIC; BEGIN PROCESS(CLK0) BEGIN IF CLK0EVENT AND CLK0=1 THEN -检测时钟上升沿 Q = NOT(Q OR CL); END IF; END PROCESS; OUT1 = NOT Q; END ARCHITECTURE sxdl;图3-20 RTL图(b)-解:实现图3-20(b)RTL图的VHDL程序t3_12_b.vhd LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_b IS PORT (A,B,C,D: IN STD_LOGIC; Y: OUT STD_LOGIC); END ENTITY t3_12_b; ARCHITECTURE sxdl OF t3_12_b IS -时序电路sxdl SIGNAL AB,CD,ABCD : STD_LOGIC; BEGIN PROCESS(A,B,C,D,AB,CD,ABCD) BEGIN AB=A OR B; CD=C AND D; ABCD Y Y NULL ; END CASE; END PROCESS; END ARCHITECTURE sxdl;图3-20 RTL图(c)-解1:实现图3-20(c) RTL图的VHDL程序mux21a.vhd底层设计描述。- 用(WHEN_ELSE)实现2选1多路选择器程序(mux21a.vhd)。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21a IS PORT(a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN y=a WHEN s=0 ELSE b; END ARCHITECTURE one;-解2:实现图3-20(c)RTL图的VHDL程序DFF6.vhd底层设计描述。- 电平触发D型触发器程序(DFF6.vhd) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF6 IS PORT(CLK: IN STD_LOGIC; D: IN STD_LOGIC; Q:OUT STD_LOGIC); END; ARCHITECTURE bhv OF DFF6 IS BEGIN PROCESS(CLK,D) BEGIN IF CLK=1 THEN Q=D; END IF; END PROCESS; END bhv;-解3:实现图3-20(c)RTL图的VHDL程序t3_12_c.vhd顶层设计描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_c IS PORT(D1,D2,CLK : IN STD_LOGIC; Q : OUT STD_LOGIC); END ENTITY t3_12_c; ARCHITECTURE one OF t3_12_c IS COMPONENT mux21a -调用2选1多路选择器声明语句 PORT(a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC); END COMPONENT; COMPONENT DFF6 -调用电平型D触发器声明语句 PORT(CLK: IN STD_LOGIC; D: IN STD_LOGIC; Q:OUT STD_LOGIC); END COMPONENT; SIGNAL DD: STD_LOGIC; -定义1个信号作为内部的连接线。 BEGIN u1: mux21a PORT MAP(CLK,D2,D1,DD); u2: DFF6 PORT MAP(CLK,DD,Q); END ARCHITECTURE one;图3-20 RTL图(d)-解1:实现图3-20(d)RTL图的VHDL程序DFF_PRE.vhd底层设计描述- 带预置、清零和输出使能的D触发器程序(DFF_PRE.vhd)。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF_PRE_CLR_ENA IS PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END; ARCHITECTURE bhv OF DFF_PRE_CLR_ENA IS SIGNAL Q1:STD_LOGIC; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS(CLK,D,Q1,ENA,PRE,CLR) BEGIN IF CLR=1 THEN Q1=0; ELSIF PRE=1 THEN Q1=1; ELSIF CLKEVENT AND CLK=1 AND ENA=1 THEN Q1=D; END IF; -IF EN=1 THEN Q=Q1; -将内部的暂存数据向端口输出 -END IF; Q=Q1; -将内部的暂存数据向端口输出 END PROCESS; END bhv;-解2:实现图3-20(d)RTL图的VHDL程序t3_12_d.vhd顶层设计描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_d IS PORT(SET,D,CLK,EN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC); END ENTITY t3_12_d; ARCHITECTURE one OF t3_12_d IS COMPONENT DFF_PRE_CLR_ENA -调用D触发器声明语句 PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END COMPONENT; SIGNAL SS: STD_LOGIC; -定义1个信号作为内部的连接线。 BEGIN SS=SET AND (NOT RESET); u1: DFF_PRE_CLR_ENA PORT MAP(CLK,D,Q,EN,SS,RESET); END ARCHITECTURE one;图3-20 RTL图(e)-解1:实现图3-20(e)RTL图的VHDL程序DFF_PRE_CLR.vhd底层设计描述- 带预置、清零和输出使能的D触发器程序(DFF_PRE_CLR.vhd) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DFF_PRE_CLR_ENA IS PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END; ARCHITECTURE bhv OF DFF_PRE_CLR_ENA IS SIGNAL Q1:STD_LOGIC; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS(CLK,D,Q1,ENA,PRE,CLR) BEGIN IF CLR=1 THEN Q1=0; ELSIF PRE=1 THEN Q1=1; ELSIF CLKEVENT AND CLK=1 AND ENA=1 THEN Q1=D; END IF; -IF EN=1 THEN Q=Q1; -将内部的暂存数据向端口输出 -END IF; Q=Q1; -将内部的暂存数据向端口输出 END PROCESS; END bhv;-解2:实现图3-20(e)RTL图的VHDL程序t3_12_d.vhd顶层设计描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY t3_12_e IS PORT(D,EN,CLK,RST : IN STD_LOGIC; Q1,Q : OUT STD_LOGIC); END ENTITY t3_12_e; ARCHITECTURE one OF t3_12_e IS COMPONENT DFF_PRE_CLR_ENA -调用D触发器声明语句 PORT(CLK : IN STD_LOGIC; D : IN STD_LOGIC; Q :OUT STD_LOGIC; ENA : IN STD_LOGIC; PRE : IN STD_LOGIC; CLR : IN STD_LOGIC); END COMPONENT; SIGNAL D_EN: STD_LOGIC; -定义1个信号作为内部的连接线。 BEGIN D_ENCLK,D=D,Q=Q,ENA=EN,PRE=0,CLR=RST); Q1=(NOT D_EN) OR RST; END ARCHITECTURE one;图3-20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品组合管理
- 幼小衔接培训老师
- 医院冬季消防法律培训
- 销售月度工作总结及计划
- 儿童哮喘护理
- 表单填写说明培训
- 有效沟通机制培训
- 职业教育管理学理论与实践
- 肢体无力护理查房
- 子宫颈癌护理诊断
- 2024年重新写抚养协议书模板
- 专题6.6射影定理专项提升训练(重难点培优)-2022-2023学年九年级数学下册尖子生培优题典(原卷版)
- 中华诗词之美学习通超星期末考试答案章节答案2024年
- 蚊蝇虫鼠害防治管理制度
- DL∕T 1811-2018 电力变压器用天然酯绝缘油选用导则
- 水泵检修工(高级)技能鉴定考试题库(含答案)
- AQ/T 9009-2015 生产安全事故应急演练评估规范(正式版)
- 泸州老窖“浓香文酿杯”企业文化知识竞赛考试题库大全-下(多选、填空题)
- 酒店运营管理 智慧树知到期末考试答案章节答案2024年山东青年政治学院
- 幼儿园课程故事开展培训
- 佐藤大用设计解决问题
评论
0/150
提交评论