集成电路软件设计
实验二:十进制加减计数器
实验地点 实验时间 学 院 班 级 姓 名 学 号 成 绩 指导老师
年 月 日
一、设计任务
1、设计十进制加减计数器;
2、练习使用Modelsim软件和Synopsys公司的Design Compiler软件。 二、设计要求
1、十进制加减计数器;
2、控制端口控制加与减的计数;
3、输入时钟的频率自定,符合设计即可 三、预习要求
编写加减计数器的VHDL代码; library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; entity counter is
port(clk ,up: in std_logic; q: out integer ); end ;
architecture one of counter is
signal count :integer range 0 to 99; begin
process(clk) begin
if clk'event and clk='1' then if up='1' then
if count=99 then count<=0; else count<=count+1; end if ;
elsif up='0' then
if count=0 then count<=29; else count<=count-1; end if ; end if; end if; end process ; q<=count; end ;
四、实验报告
使用Modelsim软件编译并仿真加减计数器的VHDL代码,编写Testbench,给出仿真结果;
LIBRARY ieee ;
USE ieee.std_logic_1164.all ; USE ieee.std_logic_unsigned.all ; ENTITY testbench IS
END ;
ARCHITECTURE counter_tb_arch OF testbench IS SIGNAL q :integer range 0 to 99 ; SIGNAL up:std_logic :='1'; SIGNAL clk:std_logic :='0'; COMPONENT counter
PORT (clk,up: in std_logic;
q:out integer range 0 to 99 ); END COMPONENT ; BEGIN
DUT : counter
PORT MAP ( q=> q ,up=> up ,clk => clk ) ; process(clk)
begin clk <= not clk after 20ns; end process;
up <= '0' after 1000ns; END ;
五、仿真波形
通过VHDL代码的编译成功和testbench的编写并对其编译、仿真,其仿真结果如下图所示:
六、网表电路
使用Design Compiler软件将加减计数器的VHDL代码综合成网表电路;
七、对比综合后的网表电路与前期VHDL代码,检查一致性。
通过对比生成网表电路的输入与输出管脚,结合生成网表中的每个模块的功能,同时对每个功能模块的分析,并从中得到网表电路运行后的结果,通过把功能网表的运行结果和vhdl的仿真结果比较,得到他们是一致的。
八、总结(实验过程中遇到的问题以及解决问题的过程。)
在编译时出现了许多错误?经过反复修改编译?再修改再编译最终排除了所有的错误。比如
刚开始在VHDL代码设计中输出端口q不是用integer既整形,结构不能十进制计数,后面改成整形,才能真正达到十进制的计数。在打来encounter软件时,由于modelsim 的软件没有关闭,使得unis操作系统没有响应。通过关闭操作系统然后重新开启后就可以运行。