EDA技术与应用
实验报告南京理工大学紫金
实验名称:格雷码、二进制转换电路
姓名:
学号:
班级:通信
时间:2013
南京理工大学紫金学院电光系
一、 实验目的
1)学习用VHDL 代码描述组合逻辑电路的方法。
2) 掌握when …else …和generate 并行语句的使用。
二、 实验原理
1、格雷码、二进制码转换理论分析
4位格雷码二进制转换的真值表如图1。
图1 4位格雷码二进制转换的真值表
由真值表得到的表达式如下:
对于n 位二进制码转换为格雷码的码转换电路,转换表达式如下:
2、GENERIC 、GENERATE 语句
a 、GENERIC
GENERIC 被称为参数传递映射语句,它描述响应的元件类属参数间的衔接和传送方式。参数传递语句用于设计从外部端口改变原件内部参数或结构规模的元件,也可称其为类书元件。该语句在改变电路结构或元件硬件升级方面显得尤为便捷。 1n n i i i
g a g a a +==⊕33232121010B G B B G B B G B B G ==⊕=⊕=⊕
其语句格式为:
generic map(param.list)port map(port list);
例:generic(n:integer:=7);
该语句定义了参数N为整数,且赋值为7。
b、GENERATE语句
电路某部分由同类元件构成,这类同类元件叫做规则结构,如:ROM,RAM,移位寄存器等规则结构可以用生成语句来描述。生成语句可以用for_generate语句描述。
其书写格式如下:
标号:for循环变量in离散范围generate
并行处理语句;
end generate 标号;
其中,标号是for_generate语句的唯一标识符,是可选项;循环变量的值在每一次循环中都发生变化;离散范围用来指定变量循环的取值范围,循环变量实际上规定了循环的次数;循环变量每去一个只就执行一次并行语句。
该语句和for_loop语句很类似,但是二者也有一定的区别。For_generate语句中执行的语句为并行语句,而for_loop语句中执行的语句为顺序语句。
三、实验内容
1、建立工程、输入代码
先建立工程,工程命名为“b_to_g”,顶层文件名为“b_to_g”。
选择“File->New”,在弹出的窗口中选择“VHDL File”建立“VHDL”文件。
在新建的VHDL文件中输入格雷码、二进制码转换的VHDL代码。将文件保存。
代码如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity b_to_g is
generic(n:integer:=7);
port(b:in std_logic_vector(n downto 0);
g:buffer std_logic_vector(n downto 0));
end;
architecture rhg of b_to_g is
begin
g(n)<=b(n);
b1:for i in 0 to n-1 generate
g(i)<=b(i+1) xor b(i);
end generate b1;
end;
2、编译仿真
对当前文件进行编译,编译通过以后建立仿真波形文件,保存为“b_to_g.vwf”。为波形文件添加结点。
将“End time”设置为100μs。将输入输出编组,并为输入信号赋值,其中“Start Value”为“00000000”,“Count every”设置为5μs。如下图:
注意:“Count every”值一定要比“End time”值小,且“Count every”值最好不要设置太小(如10ns),避免在时序仿真是由于延时造成结果不正确。“Count every”值和“End time”值共同决定了输入信号值的数目。
注意:每次仿真时最好从“Simulator Tool”中导入要仿真的文件,而不是直接点击工具栏上的按钮,尤其是当工程中存在多个仿真文件时。
3、管脚配置
利用实验箱的模式5来验证设计电路的正确性。
用键1~键8表示输入管脚g0~g7,发光二极管D1~D8表示输出管脚b0~b7。
选择“Assignment→Assignment Editor”弹出管脚配置图,在“Location”一栏中填入相应器件的管脚。如下图。
将未配置的管脚设置为高阻态。
注意:总线“b”和总线“g”不需要配置管脚。
注意:配置好管脚后一定要记得编译。
4、下载
将文件下载到实验箱,对实验箱进行操作,将键1~键8按钮设置为不同的电平,观察D1~D8发光二极管的情况。
四、小结与体会
通过这次实验,我对理论课上老师所讲的generate并行语句有了更深一步的了解。
本次实验是我们的第二次实验,但是是第一次在Quartus II软件上编写代码。我掌握when…else…和generate并行语句的使用,并利用generate并行语句做了了8位二进制码/格雷码转换电路,且利用实验箱验证了所设计电路的正确性。