1、最终实现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) ENTITY h_suber IS PORT( x,y: diff,s_out: END ENTITY h_suber; ARCHITECTURE hs1 OF h_suber IS Diff = x XOR (NOT y); s_
2、out xin,y=yin, diff=a, s_out=b); u2: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:x1,yin=y1,diff_out=diff1,sub_in=a0,sub_out=a1);u2:x2,yin=y2,diff_out=diff2,sub_in=a1,sub_out=a2);u3:x3,yin=y3,diff_out=diff3,sub_in=a2,sub_out=a3);u4:x4,yin=y4,diff_out
3、=diff4,sub_in=a3,sub_out=a4);u5:x5,yin=y5,diff_out=diff5,sub_in=a4,sub_out=a5);u6:x6,yin=y6,diff_out=diff6,sub_in=a5,sub_out=a6);u7:x7,yin=y7,diff_out=diff7,sub_in=a6,sub_out=sout);END ARCHITECTURE s8;3-8 设计一个求补码的程序,输入数据是一个有符号的8位二进制(原码)数。5-9 设计一个求补码的程序,输入数据是一个有符号的8位二进制数。 USE IEEE.STD_LOGIC_UNSIGNED.
4、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 PROCESS(org_data) IF(org_data(7)=0) THEN patch_data=0,补码=原码。 else=org_data(7)&(not org_data(6 DOWNTO 0)+1;-org_data0,补码=
5、|原码|取反+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: 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)v
6、ariable data:std_logic_vector(1 downto 0);variable c:std_logic;c:=ci;for n in 0 to 7 loopdata:=(&a(n)+(b(n)+(count(n)=data(0);=data(1);end loop;co=c;end process;end bhv;3-14 用循环语句设计一个7人投票表决器,及一个4位4输入最大数值检测电路。5-7 用循环语句设计一个7人投票表决器,及一个4位4输出最大数值检测电路。 ENTITY vote_7 IS PORT( DIN: IN STD_LOGIC_VECTOR(6 DOW
7、NTO 0);-7位表决输入(1:同意,0:不同意) G_4: -超过半数指示 CNTH: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);-表决结果统计数 END vote_7; ARCHITECTURE BHV OF vote_7 IS PROCESS(DIN) VARIABLE Q: STD_LOGIC_VECTOR(2 DOWNTO 0); Q:=000 FOR n IN 0 TO 6 LOOP - n是LOOP的循环变量 IF(DIN(n)=1) THEN Q:=Q+1; END LOOP; CNTH=4 THEN G_4= ELSE G_4); -计数器异步复位
8、ELSIF CLKEVENT AND CLK= THEN -检测时钟上升沿 IF EN= THEN -检测是否允许计数或加载(同步使能) IF LOAD=DATA; -允许加载 ELSE IF Q -大于等于9时,计数值清零 IF Q=9 THEN COUT -计数大于9,输出进位信号 ELSE COUT DOUT -将计数值向端口输出END behav;5-8给出含有异步清零和计数使能的16位二进制加减可控计数器的VHDL描述。3-11 给出含有异步清零和计数使能的16位二进制加减可控计数器的VHDL描述。- 用VHDL实现含有异步清零和计数使能的16位二进制加减可控计数器。 LIBRARY
9、 IEEE; ENTITY ADD_SUB_LOAD_16 IS PORT (CLK,RST,ADD_EN,SUB_EN,LOAD : IN STD_LOGIC_VECTOR(15 DOWNTO 0); CQ : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); END ENTITY ADD_SUB_LOAD_16; ARCHITECTURE A_S_16 OF ADD_SUB_LOAD_16 IS PROCESS(CLK,RST,ADD_EN,SUB_EN,LOAD) VARIABLE CQI: STD_LOGIC_VECTOR(15 DOWNTO 0); -VARIAB
10、LE LS_LOAD : -LS_LOAD:=LOAD; IF RST = THEN CQI: -计数器异步复位 ELSIF LOAD = IF ADD_EN=THEN -检测是否允许计数(同步他能) IF CQI16#FFFF# THEN CQI:=CQI+1; -允许计数,检测是否小于65535 ELSE CQI: -大于65535,计数值清零 IF CQI=16#FFFF# THEN COUT -计数大于9,输出进位信号 ELSE COUT 0 THEN CQI:=CQI-1; IF CQI=0 THEN COUT CQ=CQI; END ARCHITECTURE A_S_16;5-9
11、entity m6 is port(clk,rst: 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) if rst= then stx=st0;qstx001=st2; when st2=011=st3; when st3=111=st4; when st4=101=st5; when st5=100 when others= stx end c
12、ase; end if; end process; end bhv;5-12 用同步时序电路对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。当5位输入中1的数目为奇数时,在最后一位的时刻输出1。4-12 用同步时序电路对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。- 当5位输入中1的数目为奇数时,在最后一位的时刻输出1。 LIBRARY IEEE; ENTITY odd_even_p_RXD_5 IS PORT(CLK,RST,S_in:-CLK、RST、S_in:时钟、复位、串行输入数据 P_out: OUT STD_LOGIC_VECTOR(4 DOWNTO 0)
13、;-P_out:并行输出数据 o_e_out: -o_e_out:奇校验输出位 END ENTITY odd_even_p_RXD_5; ARCHITECTURE one OF odd_even_p_RXD_5 IS PROCESS(CLK,RST) VARIABLE shift_Q : STD_LOGIC_VECTOR(4 DOWNTO 0);-shift_Q:移位寄存器 VARIABLE shift_cnt :-shift_cnt:移位计数器 IF CLK THEN shift_cnt: -移位寄存器和计数器复位 IF shift_cnt=4 THEN -检测到接收5位串行输入数据 shi
14、ft_cnt: -移位计数器清零,为接收下一组数据做准备。 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);-采样移位串行输入=shift_cnt+1;-移位计数5-5 分频方法有多种,最简单的是二分频和偶数分频甚至奇数分频,这用触发器或指定计数模的计数器即可办到。但对于现场实现指定分频比或小数分频率的分频电路的设计就不是很简单了。 试对例3-20的设计
15、稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起,构成一个自动加载型16位二进制数计数器,也即一个16位可控的分频器,给出其VHDL表述,并说明工作原理。设输入频率fi=4MHz,输出频率fo=516.51Hz(允许误差0.1Hz),16位加载数值是多少?3-9 16位数控分频器(可进行奇偶数分频)ENTITY DVF16 IS PORT(CLK : D : FOUT :END ENTITY DVF16;ARCHITECTURE one OF DVF16 ISSIGNAL FULL : P_REG: PROCESS(CLK) VARIABLE CNT8 :EVENT AND CLK
16、 = THEN IF CNT8 = 0000000000000000 CNT8 := D-1;-当CNT8计数归0时,预置CNT8=D-1; -计数范围(D=n):n-1n/2取整(n=10:98765计数,前后半周期相同) FULL -同时使溢出标志信号FULL输出为高电平 -(n=11:1098765计数,前比后半周期多一个时钟) ELSIF CNT8 = ( & D(15 DOWNTO 1) THEN D(15 DOWNTO 1)-1;-当CNT8=n/2取整时,预置CNT8=D/2取整-1;n/2取整0(n=10:43210计数) -同时使溢出标志信号FULL输出为高电平 (n=11:43210计数) ELSE CNT8 := CNT8 - 1; -否则继续作加1计数 -且输出溢出标志信号FULL为低电平 END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : IF FULLEVENT AND FULL = CNT2 := NOT CNT2;-如果溢出标志信号FULL为高电平,D触
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1