一、有关概念
1.ASIC全称:专用集成电路; 2.FPGA:现场可编程门阵列 3.CPLD:复杂可编程逻辑器件; 4.VHDL全称:硬件描述语言; 5.全定制; 6.半定制;
7.IP核;IP就是知识产权核或知识产权模块的意思
8.综合(器);综合就是将电路的高级语言(如行为描述)转换为低级的,可与FPGA/CPLD的基本结构相映射的网表文件或程序。
9.适配(器);适配器也称结构综合器,它的功能是将综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件。
10.功能仿真;是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求
11.时序仿真;就是接近真实器件运行特性的仿真,仿真文件中已包含了器件硬件特性参数,因而,仿真精度高。
12.编程下载;把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD下载,以便进行硬件测试和验证 13.PROM;可编程只读存储器 14.PLA;可编程逻辑阵列 15.PAL;可编程阵列逻辑 16.查找表; 17.乘积项;
18.实体;VHDL实体作为一个设计实体(独立的电路功能结构)的组成部分,其功能是对这个设计实体与外部电路进行接口描述。
19.结构体;结构体是实体所定义实体中的一个组成部分。结构体描述设计实体的内部结构和外部设计实体端口间的逻辑关系。
20.元件例化;元件例化意味着在当前结构体内定义了一个新的设计层次,这个设计层次的总称叫元件,但它可以以不同的形式出现。?? 21.时钟进程; 22.三态; 23.线与; 24.数据对象;
25.变量;变量是一个局部量,只能在进程和子程序中使用,变量的赋值是立即发生的,不存在任何延时行为。
26.信号;信号是硬件系统的基本数据对象,它的性质类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道
27.Moore型状态机;异步输出状态机,输出仅为当前状态的函数,在输入发生变化时还必须等待时钟的到来。
28.Mealy型状态机;同步输出状态机,输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的。不依赖于时钟的同步。
注意:
1.
2.程序的实体名必须和文件名一致,例1中二输入与门的文件名必须为yumen
一、有关概念
ASIC全称;FPGA和CPLD全称;VHDL全称;全定制;半定制; IP核;综合(器);适配(器);功能仿真;时序仿真;编程下载;PROM;PLA;PAL;查找表;乘积项;实体;结构体;元件例化;时钟进程;三态;线与; 数据对象;变量;信号; Moore型状态机;Mealy型状态机。
二、程序分析及设计
1、二输入与门的VHDL语言设计。 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY yumen IS
PORT ( a, b : IN BIT;
y : OUT BIT ); END ENTITY yumen ; ARCHITECTURE one OF yumen IS BEGIN y
2、带有异步复位和同步时钟使能的6进制计数器VHDL语言设计。
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY jinzhi IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ; COUT : OUT STD_LOGIC ); END jinzhi ; ARCHITECTURE behav OF jinzhi IS BEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN IF RST = \'1\' THEN CQI := (OTHERS =>\'0\') ; --计数器复位 ELSIF CLK\'EVENT AND CLK=\'1\' THEN --检测时钟上升沿 IF EN = \'1\' THEN --检测是否允许计数 IF CQI
ELSE CQI := (OTHERS =>\'0\');--大于5,计数值清零 END IF; END IF; END IF; IF CQI = 5 THEN COUT
3、用VHDL语言设计2选1数据选择器。
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY erxuanyi IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END erxuanyi ; ARCHITECTURE one OF erxuanyi IS BEGIN PROCESS (a,b,s) BEGIN IF s = \'0\' THEN y
4、边沿型T、D触发器VHDL语言设计。 --D触发器
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF IS SIGNAL Q1 : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLK\'EVENT AND CLK = \'1\' THEN Q1
--T触发器
有clk且为1的时候,T与当前状态异或
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY tff IS PORT (CLK : IN STD_LOGIC ; T : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF tff IS SIGNAL Q1 : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLK\'EVENT AND CLK = \'1\' THEN Q1
5、带并行置数的8位右移移位寄存器VHDL语言设计。
library ieee; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFRT IS PORT (CLK,LOAD: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
QB:OUT STD_LOGIC); END SHFRT;
ARCHITECTURE BEHAV OF SHFRT IS BEGIN PROCESS (CLK,LOAD)
VARIABLE REG8: STD_LOGIC_VECTOR(7 TO 0); BEGIN
IF CLK\'EVENT AND CLK=\'1\' THEN
IF LOAD=\'1\' THEN REG8:=DIN;
ELSE REG8(6 DOWNTO 0) :=REG8(7 DOWNTO 1);
END IF;
END IF;
QB
6、1位半加器VHDL语言设计。(布尔逻辑描述) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY banjia IS PORT (a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END ENTITY banjia; ARCHITECTURE fh1 OF banjia IS BEGIN so
7、用VHDL语言设计实现四选一数据选择器。
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY sixuan IS PORT ( a, b, c , d: IN BIT;
s: IN STD_LOGIC_VECTOR(1 DOWNTO 0); y : OUT BIT ); END sixuan ; ARCHITECTURE one OF sixuan IS BEGIN PROCESS (a,b,c,d,s) BEGIN case s(1 DOWNTO 0) is when \"00\" => y y y y null ; END case ; END PROCESS; END;
8、用VHDL语言实现三态门设计。
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY santai IS port ( enable : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END santai ; ARCHITECTURE bhv OF santai IS BEGIN PROCESS(enable,datain) BEGIN IF enable = \'1\' THEN dataout
9、设有VHDL描述的半加器h_adder和或门or2,试通过层次化设计思想设计由半加器和或门构成的一位二进制全加器的VHDL程序。全加器f_adder电路结构组成图如下所示。
半加器h_adder LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder IS BEGIN so
或门 or2a LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c
元件例化adder library ieee; use ieee.std_logic_1164.all; entity adder is port (ain,bin,cin:in std_logic;
cout,sum :out std_logic); end entity adder; architecture fd1 of adder is component h_adder
port(a,b:in std_logic;
co,so:out std_logic); end component; component or2a
port(a,b:in std_logic;
c:out std_logic); end component; signal d,e,f:std_logic; begin u1 : h_adder port map(a=>ain,b=>bin,co=>d,so=>e); u2 : h_adder port map(a=>e,b=>cin,co=>f,so=>sum); u3 : or2a port map(a=>d,b=>f,c=>cout); end architecture fd1;