EDA技术实用教程课后答案---潘松-黄继业

上传人:gbs****77 文档编号:9287014 上传时间:2020-04-04 格式:DOC 页数:20 大小:273.82KB
返回 下载 相关 举报
EDA技术实用教程课后答案---潘松-黄继业_第1页
第1页 / 共20页
EDA技术实用教程课后答案---潘松-黄继业_第2页
第2页 / 共20页
EDA技术实用教程课后答案---潘松-黄继业_第3页
第3页 / 共20页
点击查看更多>>
资源描述
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 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 x y sub in 是借位输入 图 3 19 1 位全加器 解 1 1 实现 1 位半减器 h suber diff x y s out 1 x y 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 xin yin a b diff outc 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 org data 0 补码 原码 取反 1 END IF END PROCESS END BHV 3 10 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity add is port 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 is begin process a b ci variable data std logic vector 1 downto 0 variable c std logic begin c ci for n in 0 to 7 loop data 0 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 4 0 计数器异步复位 ELSIF CLK EVENT AND CLK 1 THEN 检测时钟上升沿 IF EN 1 THEN 检测是否允许计数或加载 同步使能 IF LOAD 0 THEN Q DATA 允许加载 ELSE IF Q 0 大于等于 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 CLK EVENT AND CLK 1 THEN 检测时钟上升沿 IF ADD EN 1 THEN 检测是否允许计数 同步他能 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 9 library 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 CLK EVENT 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 采样移位串行输入 ELSE shift cnt shift cnt 1 移位计数 shift Q S in 采样移位串行输入 END IF END IF END IF END PROCESS END ARCHITECTURE one 5 5 分频方法有多种 最简单的是二分频和偶数分频甚至奇数分频 这用触发器或指定计数模的 计数器即可办到 但对于现场实现指定分频比或小数分频率的分频电路的设计就不是很简单了 试对例 3 20 的设计稍作修改 将其进位输出 COUT 与异步加载控制 LOAD 连在一起 构成一个 自动加载型 16 位二进制数计数器 也即一个 16 位可控的分频器 给出其 VHDL 表述 并说明工作原 理 设输入频率 fi 4MHz 输出频率 fo 516 5 1Hz 允许误差 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 IS SIGNAL FULL STD LOGIC BEGIN P REG PROCESS CLK VARIABLE CNT8 STD LOGIC VECTOR 15 DOWNTO 0 BEGIN IF CLK EVENT AND CLK 1 THEN IF CNT8 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 计数 前比后半周期多一个时钟 ELSIF CNT8 0 当 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 计数 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 FULL EVENT 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 CLK0 EVENT 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 CLK EVENT 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 CLK EVENT 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 RTL 图 f 解 1 实现图 3 20 f 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 f 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 CLK EVENT 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 解 3 实现图 3 20 f RTL 图的 VHDL 程序 t3 12 d vhd 顶层设计描述 LIBRARY IEEE USE IEEE STD LOGIC 1164 ALL ENTITY t3 12 f IS PORT RST D CLK IN STD LOGIC Q DOUT OUT STD LOGIC END ENTITY t3 12 f ARCHITECTURE one OF t3 12 f 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 COMPONENT mux21a 调用 D 触发器声明语句 PORT a b IN STD LOGIC s IN STD LOGIC y OUT STD LOGIC END COMPONENT SIGNAL DD DDD STD LOGIC 定义 1 个信号作为内部的连接线 BEGIN u1 mux21a PORT MAP D 0 RST DD DDD5 END g 5 cmp ARCHITECTURE BHV OF g 5 cmp IS BEGIN PROCESS d in BEGIN IF d in 0101 THEN cmp out 1 输入数据大于 5 比较输出 1 else cmp out 0 输入数据小于等于 5 比较输出 0 END IF END PROCESS END BHV 8 6 用 VHDL 输入方式设计一个周期性产生二进制序列 01001011001 的序列发生器 用移位寄存 器或用同步时序电路实现 并用时序仿真器验证其功能 同步时序电路 LIBRARY IEEE USE IEEE STD LOGIC 1164 ALL ENTITY S generator IS PORT CLK CLR IN STD LOGIC 工作时钟 复位信号 S out OUT STD LOGIC 序列输出位 END S generator ARCHITECTURE behav OF S generator IS SIGNAL D STD LOGIC VECTOR 10 DOWNTO 0 11 位循环移位寄存器 BEGIN PROCESS CLK CLR BEGIN IF CLK EVENT AND CLK 1 THEN 时钟到来时 逐位左移循环输出序列位 IF CLR 1 THEN D 01001011001 复位操作 产生 11 位待输出序列 ELSE D 10 DOWNTO 1 D 9 DOWNTO 0 D 0 D 10 S out D 10 END IF END IF END PROCESS END behav 移位寄存器 library ieee use ieee std logic 1164 all use ieee std logic unsigned all use ieee std logic arith all entity add is PORT clk rest IN STD LOGIC So OUT STD LOGIC end add architecture bhv of add is begin process clk rest variable a std logic vector 10 downto 0 01001011001 variable b std logic vector 3 downto 0 begin if rest 1 then so 0 elsif clk event and clk 1 then b b 1 if b 1100 then b 0000 end if so a 10 a TO STDLOGICVECTOR to bitvector a rol 1 end if end process end bhv EDA 实验 格雷码变换 LIBRARY IEEE USE IEEE STD LOGIC 1164 ALL ENTITY graycode IS PORT a IN STD LOGIC VECTOR 3 DOWNTO 0 en IN STD LOGIC g OUT STD LOGIC VECTOR 3 DOWNTO 0 END graycode ARCHITECTURE arc OF graycode IS BEGIN PROCESS a en BEGIN IF en 0 THEN g 0000 ELSE g 3 a 3 FOR i IN 0 TO 2 LOOP g i a i 1 XOR a i END LOOP END IF END PROCESS END arc
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!