《EDA技术实用教程(第五版)》习题答案(第1~10章)--潘

5-12 用同步时序电路对串行二进制输入进行奇偶校验,每检测5位输入,输出一个结果。当5位输入中1的数目为奇数时,在最后一位的时刻输出1。(同步复位) (异步复位)

--解1(同步复位):5-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:=\ --移位寄存器和计数器复位 ELSE

IF shift_cnt=4 THEN --检测到接收5位串行输入数据

shift_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);--采样移位串行输入 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;

--解2(异步复位):5-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 RST = '1' THEN shift_cnt:=\ --移位寄存器和计数器复位 ELSE

IF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿 IF shift_cnt=4 THEN --检测到接收5位串行输入数据

shift_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);--采样移位串行输入 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-13 基于原理图输入方式,用7490(十进制计数器)设计模为872的计数器,且输出个位、十位、百位都应符合8421码权重。

5-14 基于原理图输入方式,用74194、74273、D触发器等器件组成8位串入并出的转换电路,要求在转换过程中数据不变,只有当8位一组数据全部转换结束后,输出才变化一次。(QII下波形仿真 )

6 习 题

6-1 归纳利用QuartusII进行VHDL文本输入设计的流程:从文件输入一直到SignalTap II测试。P146~P152

6-2 如何为设计中的SignalTap II加入独立采用时钟?试给出完整的程序和对它的实测结果。 P151~P152

ARCHITECTURE ONE OF xxx IS

attribute chip_pin of CLK0:signal is”G2 1”; --逻辑分析仪采样时钟 6-3 根据6.6.2节的内容完成Quartus II与Synplify的接口,并通过实测证实在编译中 Quartus II调用了Synplify综合器。 P159~P161

7 习 题

7-1. 如果不使用MegaWizard Plug-In Manager工具,如何在自己的设计中调用LPM模块?以计数器lpm_counter为例,写出调用该模块的程序,其中参数自定。 (提示:参考例7-1)P171

--7-1 如果不使用Megawizard Plug_In Manager工具,如何在自已的设计中调用LPM模块? -- 以计数器lpm_counter为例,写出调用该模块的程序,其中参数自定。 -- 答:1.在程序开始部分增加打开\库和使用\所有程序包。 -- 答:2.在结构说明描述部分增加调用\传递参数和端口的申明。

-- 答:3.在结构行为描述部分增加调用\传递参数和端口的例化。示例如下: -- 答:4.调用计数器lpm_counter(LPM模块)的VHDL程序如下:(SINGT_counter.vhd) LIBRARY ieee;

USE ieee.std_logic_1164.all; LIBRARY lpm;

USE lpm.all;

ENTITY SINGT_counter IS

PORT(clock: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END SINGT_counter;

ARCHITECTURE SYN OF singt_counter IS

SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); COMPONENT lpm_counter

GENERIC(lpm_direction : STRING; lpm_port_updown : STRING; lpm_type : STRING; lpm_width : NATURAL);

PORT (clock: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END COMPONENT; BEGIN

q <= sub_wire0(7 DOWNTO 0);

lpm_counter_component : lpm_counter

GENERIC MAP(lpm_direction => \ lpm_type => \ PORT MAP(clock => clock,q => sub_wire0); END SYN;

7-2 分别以图7-18(例7-1)和例7-7(6)的代码形式设计两个相同参数的RAM程序,它们是8(10)位数据线和10(8)位地址线。初始化文件是mif格式的正弦波数据文件,即合1024个点,每个点8位二进制数的一个周期的正弦波波形,设初相位是0。在Quartus II上进行仿真,验证设计的正确性,并比较它们的结构特点、资源利用情况及工作速度。 --解1:以例7-7代码形式设计RAM(8位数据和10位地址) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;--此程序包括含转换函数CONV_INTEGERlA) USE IEEE.STD_LOGIC_UNSIGNED.ALL;--此程序包包含算符重载函数 ENTITY RAM10x8 IS

PORT( CLK: IN STD_LOGIC;--定义时钟

WREN: IN STD_LOGIC;--定义写允许控制

A: IN STD_LOGIC_VECTOR(9 DOWNTO 0);--定义RAM的10位地址输入端口 DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);--定义RAM的8位数据输入端口 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--定义RAM的8位数据输出端口 END;

ARCHITECTURE bhv OF RAM10x8 IS

TYPE G_ARRAY IS ARRAY(0 TO 1024) OF STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL MEM: G_ARRAY;--定义信号MEM的数据类型为用户新定义的类型G_ARRAY

attribute ram_init_file: string;--定义字符串属性的标识符ram_init_file。 attribute ram_init_file of MEM: --定义标识符ram_init_file是MEM的属性, SIGNAL IS \ --并将字符串\初始化赋给ram_init_file。 BEGIN

PROCESS(CLK) BEGIN

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4