B <= 'Z'; Y <= A;
END IF;
END PROCESS;
END BEHAV;
六、综合题
下图是一个A/D采集系统的部分,要求设计其中的FPGA采集控制模块,该模块由三个部分构成:控制器(Control)、地址计数器(addrcnt)、内嵌双口RAM(adram)。控制器(control)是一个状态机,完成AD574的控制,和adram的写入操作。Adram是一个LPM_RAM_DP单元,在wren为?1?时允许写入数据。试分别回答问题
信号预处理放大采样/保持AD574ADDataSTATUSCSCEA0AnalogInRCK12_8CLKClkInc112rddata12wrenadram(lpm_ram_dp)12rddatardaddr10Control10wraddrCntclr地址计数器FPGA采集控制
下面列出了AD574的控制方式和控制时序图
AD574逻辑控制真值表(X表示任意)
CE 0 X 1 1 1 1 1 CS X 1 0 0 0 0 0 RC X X 0 0 1 1 1 K12_8 X X X X 1 0 0 A0 X X 0 1 X 0 1 工 作 状 态 禁止 禁止 启动12位转换 启动8位转换 12位并行输出有效 高8位并行输出有效 低4位加上尾随4个0有效
AD574工作时序:
1. 要求AD574工作在12位转换模式,K12_8、A0在control中如何设置 K12_8为‘1’,A0为‘0’
2. 试画出control的状态机的状态图 类似书上图8-4
3. 对地址计数器模块进行VHDL描述
输入端口:clkinc 计数脉冲 cntclr 计数器清零 输出端口:rdaddr RAM读出地址,位宽10位
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity addr_cnt is
architecture one of addr_cnt is
signal tmp : std_logic_vector (9 downto 0); process (clkinc, cntclr) begin
if clkinc'event and clkinc = '1' then
if cntclr = '1' then
tmp <= (others => '0'); tmp <= tmp + 1; else end if;
begin
port ( clkinc, cntclr : in std_logic;
wraddr : out std_logic_vector (9 downto 0) );
end addr_cnt;
end if;
end process; wraddr <= tmp;
end one;
4. 根据状态图,试对control进行VHDL描述
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity control is
port ( addata : in std_logic_vector (11 downto 0);
status, clk : in std_logic;
cs, ce, a0, rc, k12_8, clkinc : out std_logic; rddata : out std_logic_vector (11 downto 0) );
end control;
architecture behav of control is
type con_st is (s0, s1, s2, s3, s4); signal cst, nst : con_st; signal lock : std_logic;
signal reg12 : std_logic_vector (11 downto 0); a0 <= '0'; k12_8 <= '1'; ce <= '1'; cs <= '0';
REGP : process (clk)
begin
begin
if clk'event and clk = '1' then
cst <= nst; end if;
end process;
COMP : process (cst, status, addata) begin
case (cst) is
when s0 => rc <= '1'; lock <= '0'; nst <= s1; when s1 => rc <= '0'; lock <= '0'; nst <= s2; when s2 => if status = '1' then nst <= s3; end if;
rc <= '1'; lock <= '0';
when s3 => rc <= '1'; lock <= '1'; nst <= s4; when s4 => rc <= '1'; lock <= '0'; nst <= s0; when others => nst <= s0;
end case;
end process;
LOCKP : process (lock) begin
if lock = '1' and lock'event then
reg12 <= addata; end if;
end process; rddata <= reg12;
clkinc <= lock; --(或者为NOT LOCK,延后半个时钟)
end behav;
5. 已知adram的端口描述如下
ENTITY adram IS PORT ( data : IN STD_LOGIC_VECTOR (11 DOWNTO 0); -- 写入数据 wraddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 写入地址 rdaddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 读地址 wren : IN STD_LOGIC := '1'; -- 写使能 q : OUT STD_LOGIC_VECTOR (11 DOWNTO 0) -- 读出数据 );
END adram;
试用例化语句,对整个FPGA采集控制模块进行VHDL描述
library ieee;
use ieee.std_logic_1164.all; entity daco is
port ( clk, cntclr, status : in std_logic;
addata : in std_logic_vector (11 downto 0); rdaddr : in std_logic_vector (9 downto 0); cs, ce, a0, rc, k12_8 : out std_logic;
rddata : out std_logic_vector (11 downto 0) );
end daco;
architecture one of daco is 址
wren q );
: IN STD_LOGIC := '1'; -- 写使能
: OUT STD_LOGIC_VECTOR (11 DOWNTO 0) -- 读出
component control is
port ( addata : in std_logic_vector (11 downto 0);
status, clk : in std_logic;
cs, ce, a0, rc, k12_8, clkinc : out std_logic; rddata : out std_logic_vector (11 downto 0) );
end component;
component addr_cnt is
port ( clkinc, cntclr : in std_logic;
wraddr : out std_logic_vector (9 downto 0) );
end component; component adram IS
PORT ( data
: IN STD_LOGIC_VECTOR (11 DOWNTO 0); -- 写入
数据
wraddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 写入rdaddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 读地
地址
数据
END component;
signal rds : std_logic_vector (11 downto 0); signal clkinc : std_logic;
signal wraddr : std_logic_vector (9 downto 0); u1 : control
port map (addata => addata, status => status,
begin
clk => clk, cs => cs, ce => ce, a0 => a0, rc => rc, k12_8 => k12_8, clkinc => clkinc, rddata => rds);
u2 : addr_cnt port map (clkinc => clkinc, cntclr => cntclr, u3 : adram
port map (data => rds, wraddress => wraddr, rdaddress => rdaddr, wren => '1', q => rddata);
wraddr => wraddr);
end one;
EDA期末试卷
本大题得分 评 阅 人
一、填空题(本大题共10小题,每空1分,共20 分) 1.一般把EDA技术的发展分为 MOS时代 、 CMOS时代 和 ASIC 三个阶段。 2.EDA设计流程包括 设计输入 、 设计实现 、 实际设计检验 和 下载编程 四个步骤。
3.EDA设计输入主要包括 图形输入 、 HDL文本输入 和 状态机输入 。 4.时序仿真是在设计输入完成之后,选择具体器件并完成布局、布线之后进行的时序关系仿真,因此又称为 功能仿真 。
5.VHDL的数据对象包括 变量 、 常量 和 信号 ,它们是用来存放各种类型数据的容器。
6.图形文件设计结束后一定要通过 仿真 ,检查设计文件是否正确。 7.以EDA方式设计实现的电路设计文件,最终可以编程下载到 FPGA 和 CPLD 芯片中,完成硬件设计和验证。
8.MAX+PLUS的文本文件类型是(后缀名) .VHD 。
9.在PC上利用VHDL进行项目设计,不允许在 根目录 下进行,必须在根目录为设计建立一个工程目录(即文件夹)。
10.VHDL源程序的文件名应与 实体名 相同,否则无法通过编译。 本大题得分 评阅人 二、选择题:(本大题共5小题,每小题3分,共15 分)。
11. 在EDA工具中,能完成在目标系统器件上布局布线软件称为(C ) A.仿真器 B.综合器 C.适配器 D.下载器
12. 在执行MAX+PLUSⅡ的(D )命令,可以精确分析设计电路输入与输出波形间的延时量。
A .Create default symbol B. Simulator C. Compiler D.Timing Analyzer 13.VHDL常用的库是(A )
A. IEEE B.STD C. WORK D. PACKAGE 14.下面既是并行语句又是串行语句的是( C )
A.变量赋值 B.信号赋值 C.PROCESS语句 D.WHEN…ELSE语句 15.在VHDL中,用语句(D )表示clock的下降沿。
A. clock?EVENT B. clock?EVENT AND clock=?1? C. clock=?0? D. clock?EVENT AND clock=?0? 本大题得分 评 阅 人
三、名词解释题:(本大题共3题,每小题3分,共计9分) 16. EDA: 电子设计自动化
17.VHDL和FPGA: 超高速硬件描述语言 现场可编程门阵列 18.元件例化 :一个实体的结构体中引用某些元件,称为元件例化。
本大题得分 评 阅 人