带有异步复位端的D触发器
![f0c3d669aecabac3ea280f619bbb6d97.png](https://i-blog.csdnimg.cn/blog_migrate/78576759fbb870439f0bfe397183a6ea.png)
1.原理:(D触发器是靠时钟的上升沿触发的,rst低电平使能)
rst=1时,无论时钟是什么状态,q均被置为低电平(0)
rst=0时,时钟为上升沿,输入的值传送给输出,即d的波形传送给q
时钟为下降沿,q被置为低电平(0)
2.代码:
LIBRARY
3.代码解析:
LIBRARY
库声明格式如上。lLIBRARY,USE是VHDL保留的关键字(“;”分号表示语句结束, “--”两个减号表示后续文字为注释,“.”小数点表示谁的谁,包含关系<描述的不太准确,见谅>)。第一句声明设计中使用ieee库,第二句声明使用ieee库的std_logic_1164包中的所有内容
库种类:库分为ieee库,std库,work库。 ieee库列举常用的包:std_logic_1164:逻辑系统;std_logic_arith:数据类型的转换;std_logic_signed;std_logic_unsigned。
重点来啦:std库与work库在程序中是默认可见的,不需声明,只有ieee库使用前需要声明。
ENTITY
如上为实体结构(用来描述电路的输入输出引脚)语法结构如下:
ENTITY entity_name IS
PORT(
port_name : signal_mode signal_type;
port_name a,b,c : signal_mode signal_type;
END entity_name;
signal_mode有四种(IN;OUT;INOUT;BUFFER)
IN,OUT是单向引脚,INOUT是双向引脚,BUFFER输出一个引脚,但是输出信号可供电路内部使用 注意啦:OUT不能供电路内部使用
![fe7ad047b9cd96ceb9c653546bda85c6.png](https://i-blog.csdnimg.cn/blog_migrate/ded6c791d5b875a27c02899838e99121.png)
signal_type包括BIT;STD_LOGIC;INTEGER
bit只有0,1两种状态
std_logice包括高阻(Z)等其他状态.
详细说明如下:
BIT是一个逻辑型的数据类型,端口为BIT类型时,该端口的信号取值只可能是“1”或“0”(“1”或“0”是值逻辑值),当端口为BIT_VECTOR时,该端口的取值可能是一组二进制的值(如某一数据总线输出端口具有8位的总线宽度,那么这样的总线端口的数据类型可以被说明为BIT_VECTOR).
STD_LOGIC是IEEE在1993年制定的新的标准(IEEE STD1164),它具有9种不同的值
'U'——初始值
'X'——不定
'0'——0
'1'——1
'Z'——高阻
'W'——弱信号不定
'L'——弱信号0
'H'——弱信号1
'-'——不可能的情况
考虑到D触发器是时序逻辑电路,输入信号d可能为其他形式的,用STD_LOGIC ???
ARCHITECTURE
ARCHITECTURE部分为构造体(用来描述电路行为和实现功能),如上为语法结构 声明(需要时写):对信号和常量等进行声明 代码(BEGIN-END):描述电路行为和实现功能
PROCESS
PROCESS(进程) PROCESS(clk,rst)中(clk,rst)为敏感信号列表:敏感信号中的某个信号发生变化,PROCESS中的代码就顺序执行一次。类似与C中的条件 循环代码,VHDL的条件为信号的变化,如时钟信号的上升下降沿的出现,程序就会执行一次
clk 'EVENT:如果clk发生了变化,返回值为布尔值TRUE,否则返回FALSE,此处判断是否出现上升沿。IF(clk 'EVENT AND clk ='1')为搭配
IF语句是用于顺序代码的,只能用于PROCESS,FUNCTION,PROCEDURE中。 没什么好讲的,记住就可以了。格式为
IF
"<="给信号赋值,如仿真图,只有“0”,“1”两种电平
":=" 给变量赋值
默认情况下,ENTITY中的所有端口都是信号
VHDL不区分大小写
4.仿真
![1a3cd9aac5f462de68d25ad462806c2c.png](https://i-blog.csdnimg.cn/blog_migrate/b5986f7293348be16f0967d54c4a0f66.png)
代码仿真软件:quartus 2
reference:VHDL数字电路设计教程