EDA技术实用教程课后答案潘松黄继业.docx
- 文档编号:3086976
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:29
- 大小:250.27KB
EDA技术实用教程课后答案潘松黄继业.docx
《EDA技术实用教程课后答案潘松黄继业.docx》由会员分享,可在线阅读,更多相关《EDA技术实用教程课后答案潘松黄继业.docx(29页珍藏版)》请在冰点文库上搜索。
EDA技术实用教程课后答案潘松黄继业
S0、S1、S2、S3。
当且
3-3给出一个4选1多路选择器的VHDL描述。
选通控制端有四个输入:
仅当S0=0时:
丫=A;S仁0时:
丫=B;S2=0时:
丫=C;S3=0时:
Y=D。
--解:
4选1多路选择器VHDL程序设计。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux41aIS
PORT(A,B,C,D:
INSTD_LOGIC;
S0,S1,S2,S3:
INSTD_LOGIC;
Y:
OUTSTD_LOGIC);
ENDENTITYmux41a;
ARCHITECTUREoneOFmux41aIS
SIGNALS0_3:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
S0_3<=S0&S1&S2&S3;
y<=AWHENS0_3="0111"ELSE
BWHENS0_3="1011"ELSE
CWHENS0_3="1101"ELSE
DWHENS0_3="1110"ELSE'Z';
3-4给出
1)首先设计
xin
ENDARCHITECTUREone;
1位全减器的VHDL描述;最终实现8位全减器。
要求:
1位半减器,然后用例化语句将它们连接起来,图4-20中hsuber是半减器,diff是输出差
a-
(diff=x-y),s_out是借位输出(s_out=1,x yin y suO 图3-191位全加器 --解(1.1): 实现1位半减器h_suber(diff=x-y;s_out=1,x USEIEEE.STD_LOGIC_1164.ALL; ENTITYh_suberIS PORT(x,y: INSTD_LOGIC; diff,s_out: OUTSTD_LOGIC); ENDENTITYh_suber; ARCHITECTUREhs1OFh_suberIS BEGIN Diff<=xXOR(NOTy); s_out<=(NOTx)ANDy; ENDARCHITECTUREhs1; --解(1.2): 采用例化实现图4-20的1位全减器 LIBRARYIEEE;--1位二进制全减器顺层设计描述 USEIEEE.STD_LOGIC_1164.ALL; ENTITYf_suberIS PORT(xin,yin,sub_in: INSTD_LOGIC; sub_out,diff_out: OUTSTD_LOGIC); ENDENTITYf_suber; ARCHITECTUREfs1OFf_suberIS COMPONENTh_suber--调用半减器声明语句 PORT(x,y: INSTD_LOGIC; diff,s_out: OUTSTD_LOGIC); ENDCOMPONENT; SIGNALa,b,c: STD_LOGIC;--定义1个信号作为内部的连接线。 BEGIN u1: h_suberPORTMAP(x=>xin,y=>yin,diff=>a,s_out=>b); u2: h_suberPORTMAP(x=>a,y=>sub_in,diff=>diff_out,s_out=>c); sub_out<=cORb; ENDARCHITECTUREfs1; 串行借位的8位减法器 sout diff7 diff1 diff0 --解 (2): 采用例化方法,以1位全减器为基本硬件;实现串行借位的8位减法器(上图所示) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYsuber_8IS PORT(x0,x1,x2,x3,x4,x5,x6,x7: INSTD_LOGIC; y0,y1,y2,y3,y4,y5,y6,y7,sin: INSTD_LOGIC; diff0,diff1,diff2,diff3: OUTSTD_LOGIC;diff4,diff5,diff6,diff7,sout: OUTSTD_LOGIC); ENDENTITYsuber_8; ARCHITECTUREs8OFsuber_8IS COMPONENTf_suber--调用全减器声明语句 PORT(xin,yin,sub_in: INSTD_LOGIC; sub_out,diff_out: OUTSTD_LOGIC); ENDCOMPONENT; SIGNALa0,a1,a2,a3,a4,a5,a6: STD_LOGIC;--定义1个信号作为内部的连接线。 BEGIN u0: f_suberPORTMAP(xin=>x0,yin=>y0,diff_out=>diff0,sub_in=>sin,sub_out=>a0);u1: f_suberPORTMAP(xin=>x1,yin=>y1,diff_out=>diff1,sub_in=>a0,sub_out=>a1);u2: f_suberPORTMAP(xin=>x2,yin=>y2,diff_out=>diff2,sub_in=>a1,sub_out=>a2);u3: f_suberPORTMAP(xin=>x3,yin=>y3,diff_out=>diff3,sub_in=>a2,sub_out=>a3);u4: f_suberPORTMAP(xin=>x4,yin=>y4,diff_out=>diff4,sub_in=>a3,sub_out=>a4);u5: f_suberPORTMAP(xin=>x5,yin=>y5,diff_out=>diff5,sub_in=>a4,sub_out=>a5);u6: f_suberPORTMAP(xin=>x6,yin=>y6,diff_out=>diff6,sub_in=>a5,sub_out=>a6);u7: f_suberPORTMAP(xin=>x7,yin=>y7,diff_out=>diff7,sub_in=>a6,sub_out=>sout); ENDARCHITECTUREs8; 3-8设计一个求补码的程序,输入数据是一个有符号的8位二进制(原码)数。 --解: 5-9设计一个求补码的程序,输入数据是一个有符号的8位二进制数。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYorg_patchIS PORT(org_data: INSTD_LOGIC_VECTOR(7DOWNTO0);--原码输入patch_data: OUTSTD_LOGIC_VECTOR(7DOWNTO0));--补码输出ENDorg_patch; ARCHITECTUREBHVOForg_patchIS BEGINPROCESS(org_data) BEGIN IF(org_data(7)='0')THENpatch_data<=org_data;--org_data>=0,补码=原码。 elsepatch_data<=org_data(7)&(notorg_data(6DOWNTO0))+1;--org_data<0,补码=|原码|取反+1。 ENDIF; ENDPROCESS; ENDBHV; 3—10 libraryieee; useieee.std_logic_1164.all; useieee.std_logic_unsigned.all; entityaddis port(a: instd_logic_vector(7downto0);b: instd_logic_vector(7downto0);ci: instd_logic; co: outstd_logic; count: outstd_logic_vector(7downto0));endadd; architecturebhvofaddisbegin process(a,b,ci) variabledata: std_logic_vector(1downto0);variablec: std_logic; begin c: =ci; fornin0to7loopdata: =('0'&a(n))+('0'&b(n))+('0'&c);count(n)<=data(0); c: =data (1); endloop; co<=c; endprocess;endbhv; 3-14用循环语句设计一个7人投票表决器,及一个4位4输入最大数值检测电路。 --解: 5-7用循环语句设计一个7人投票表决器,及一个4位4输出最大数值检测电路。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYvote_7IS 0: 不同意) PORT(DIN: INSTD_LOGIC_VECTOR(6DOWNTO0);--7位表决输入(1: 同意,G_4: OUTSTD_LOGIC;--超过半数指示 CNTH: OUTSTD_LOGIC_VECTOR(2DOWNTO0));--表决结果统计数 ENDvote_7; ARCHITECTUREBHVOFvote_7IS BEGIN PROCESS(DIN) VARIABLEQ: STD_LOGIC_VECTOR(2DOWNTO0);BEGIN Q: ="000"; FORnIN0TO6LOOP--n是LOOP的循环变量IF(DIN(n)='1')THENQ: =Q+1;ENDIF; ENDLOOP; CNTH<=Q; IFQ>=4THENG_4<='1';ELSEG_4<='0';ENDIF;ENDPROCESS; ENDBHV; 5-7用VHDL设计一个功能类似74LS160的计数器。 计数的十进制加法计数器) --解: 3-10用VHDL设计一个功能类似74LS160(异步复位和同步使能加载的计数器。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYCNT10IS PORT(CLK,RST,EN,LOAD: INSTD_LOGIC; DATA: INSTD_LOGIC_VECTOR(3DOWNTO0);--4位预置数DOUT: OUTSTD_LOGIC_VECTOR(3DOWNTO0);--计数值输出COUT: OUTSTD_LOGIC);--计数进位输出 ENDCNT10; ARCHITECTUREbehavOFCNT10IS BEGIN PROCESS(CLK,RST,EN,LOAD) --计数器异步复位 --检测时钟上升沿 VARIABLEQ: STD_LOGIC_VECTOR(3DOWNTO0);BEGIN IFRST='0'THENQ: =(OTHERS=>'0'); ELSIFCLK'EVENTANDCLK='1'THEN IFEN='1'THEN --检测是否允许计数或加载 同步使能) IFLOAD='0'THENQ: =DATA;--允许加载 ELSE IFQ<9THENQ: =Q+1;--允许计数,检测是否小于9 ELSEQ: =(OTHERS=>'0');--大于等于9时,计数值清零ENDIF; ENDIF; ENDIF; ENDIF; IFQ=9THENCOUT<='1';--计数大于9,输出进位信号 ELSECOUT<='0'; --将计数值向端口输出 ENDIF; DOUT<=Q; ENDPROCESS; ENDbehav; 5-8给出含有异步清零和计数使能的16位二进制加减可控计数器的VHDL描述。 --解: 3-11给出含有异步清零和计数使能的16位二进制加减可控计数器的VHDL描述。 --用VHDL实现含有异步清零和计数使能的16位二进制加减可控计数器。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYADD_SUB_LOAD_16IS PORT(CLK,RST,ADD_EN,SUB_EN,LOAD: INSTD_LOGIC; DATA: INSTD_LOGIC_VECTOR(15DOWNTO0); CQ: OUTSTD_LOGIC_VECTOR(15DOWNTO0); COUT: OUTSTD_LOGIC); ENDENTITYADD_SUB_LOAD_16; ARCHITECTUREA_S_16OFADD_SUB_LOAD_16ISBEGIN PROCESS(CLK,RST,ADD_EN,SUB_EN,LOAD)VARIABLECQI: STD_LOGIC_VECTOR(15DOWNTO0); --VARIABLELS_LOAD: STD_LOGIC; BEGIN --LS_LOAD: =LOAD; IFRST='1'THENCQI: =(OTHERS=>'0');--计数器异步复位 --检测时钟上升沿 --检测是否允许计数(同步他能)--允许计数,检测是否小于65535 --大于65535,计数值清零 --计数大于9,输出进位信号 --检测是否允许计数(同步他能) --允许计数,检测是否小于65535 --大于65535,计数值清零 ELSIFLOAD='1'THENCQI: =DATA;--LS_LOAD: ='0';--计数器异步复位 ELSIFCLK'EVENTANDCLK='1'THEN IFADD_EN='1'THEN IFCQI<16#FFFF#THENCQI: =CQI+1; ELSECQI: =(OTHERS=>'0'); ENDIF; IFCQI=16#FFFF#THENCOUT<='1'; ELSECOUT<='0'; ENDIF; ENDIF; IFSUB_EN='1'THEN IFCQI>0THENCQI: =CQI-1; ELSECQI: =(OTHERS=>'1'); ENDIF; IFCQI=0THENCOUT<='1'; ELSECOUT<='0'; ENDIF; ENDIF; ENDIF; CQ<=CQI; ENDPROCESS; ENDARCHITECTUREA_S_16; --计数大于9,输出进位信号 --将计数值向端口输出 5-9libraryieee; useieee.std_logic_1164.all; useieee.std_logic_unsigned.all; entitym6is port(clk,rst: instd_logic; q: outstd_logic_vector(2downto0));endm6; architecturebhvofm6is typestatesis(st0,st1,st2,st3,st4,st5);signalstx: states; beginprocess(clk) begin ifrst='1'thenstx<=st0;q<="000";elsifclk'eventandclk='1'thencase(stx)iswhenst0=>q<="000";stx<=st1;whenst1=>q<="001";stx<=st2;whenst2=>q<="011";stx<=st3;whenst3=>q<="111";stx<=st4;whenst4=>q<="101";stx<=st5;whenst5=>q<="100";stx<=st0;whenothers=>stx<=st0;endcase; endif; endprocess; endbhv; 5位输入,输出一个结果。 当5位 5位输入,输出一个结果。 1。 5-12用同步时序电路对串行二进制输入进行奇偶校验,每检测 输入中1的数目为奇数时,在最后一位的时刻输出1。 --解: 4-12用同步时序电路对串行二进制输入进行奇偶校验,每检测 --当5位输入中1的数目为奇数时,在最后一位的时刻输出 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYodd_even_p_RXD_5IS PORT(CLK,RST,S_in: INSTD_LOGIC;--CLK、RST、S_in: 时钟、复位、串行输入数据 P_out: OUTSTD_LOGIC_VECTOR(4DOWNTO0);--P_out: 并行输出数据 o_e_out: OUTSTD_LOGIC);--o_e_out: 奇校验输出位 ENDENTITYodd_even_p_RXD_5; ARCHITECTUREoneOFodd_even_p_RXD_5ISBEGIN PROCESS(CLK,RST) VARIABLEshift_Q: STD_LOGIC_VECTOR(4DOWNTO0);--shift_Q: 移位寄存器 VARIABLEshift_cnt: STD_LOGIC_VECTOR(2DOWNTO0);--shift_cnt: 移位计数器 BEGIN IFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿 IFRST='1'THENshift_cnt: ="100";-ELSE ELSE 采样移位串行输入 shift_cnt: =shift_cnt+1;--移位计数 shift_Q: =S_in&shift_Q(4DOWNTO1);-- ENDIF; ENDIF; ENDIF; ENDPROCESS; ENDARCHITECTUREone; 5-5分频方法有多种,最简单的是二分频和偶数分频甚至奇数分频,这用触发器或指定计数模的计数器即可办到。 但对于现场实现指定分频比或小数分频率的分频电路的设计就不是很简单了。 试对例3-20的设计稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起,构成一个自动加载型16位二进制数计数器,也即一个16位可控的分频器,给出其VHDL表述,并说明工作原理。 设输入频率fi=4MHz,输出频率fo=516.5±1Hz(允许误差土0.1Hz),16位加载数值是多少? --解: 3-916位数控分频器(可进行奇偶数分频) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYDVF16IS PORT(CLK: INSTD_LOGIC; D: INSTD_LOGIC_VECTOR(15DOWNTO0); FOUT: OUTSTD_LOGIC); ENDENTITYDVF16; ARCHITECTUREoneOFDVF16IS SIGNALFULL: STD_LOGIC; BEGIN P_REG: PROCESS(CLK) VARIABLECNT8: STD_LOGIC_VECTOR(15DOWNTO0); BEGIN IFCLK'EVENTANDCLK='1'THEN IFCNT8="0000000000000000"THEN CNT8: =D-1;--当CNT8计数归0时,预置CNT8=D-1; --计数范围(D=n): n-1~n/2取整(n=10: 9\8\7\6\5计数,前后半周期相同) FULL<='1';--同时使溢出标志信号FULL输出为高电平 --(n=11: 10\9\8\7\6\5计数,前比后半周期多一个时钟) ELSIFCNT8=('0'&D(15DOWNTO1))THEN CNT8: =('0'&D(15DOWNTO1))-1;--当CNT8=n/2取整时,预置CNT8=D/2取整-1; --计数范围(D=n): n/2取整~0(n=10: 4\3\2\1\0计数) FULL<='1';--同时使溢出标志信号FULL输出为高电平(n=11: 4\3\2\1\0计数) ELSECNT8: =CNT8-1;--否则继续作加1计数 FULL<='0';--且输出溢出标志信号FULL为低电平 ENDIF; ENDIF; ENDPROCESSP_REG; P_DIV: PROCESS(FULL) VARIABLECNT2: STD_LOGIC; BEGIN IFFULL'EVENTANDFULL='1'THEN CNT2: =NOTCNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反 IFCNT2='1'THENFOUT<='1'; ELSEFOUT<='0'; ENDIF; ENDIF; ENDPROCESSP_DIV; ENDARCHITECTUREone; 5-6 (a)(b) 图3-20RTL图(a) --解: 实现图3-20(a)RTL图的VHDL程序t3_12_a.vhd LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYt3_12_aIS PORT(CL,CLK0: INSTD_LOGIC; OUT1: OUTSTD_LOGIC); ENDENTITYt3_12_a; ARCHITECTUREsxdlOFt3_12_aIS----时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技术 实用教程 课后 答案 潘松黄 继业