VHDL笔记

 

VHDL的运算符号

 

VHDL中主要有六类运算符号:

赋值运算、逻辑运算、算术运算、关系运算、连接运算、移位运算;

双目运算时,两个运算量必须类型相同;

VHDL中运算没有左右优先级差别;

算术>关系>逻辑,NOT的优先级别最高;

 

赋值运算符

<=信号赋值:将右端值赋给左端信号;

:=变量赋值:将右端值赋给左端变量;或用于赋初始值;

=>数组内部分元素赋值;

 

逻辑运算符

AND(与)、OR(或)、NAND(与非)、NOR(或非)、XOR(异或)、XNOR(同或)

和NOT(取反);

适用类型:

STD_LOGIC、STD_LOGIC_VECTOR

BIT、BIT_VECTOR、BOOLEAN;

算术运算:

/(除)、*(乘)、+(加)、-(减)

MOD(求模)、REM(取余)、**(指数)、ABS(绝对值);

适用类型:

INTEGER、REAL、BIT、BIT_VECTOR、TIME;

 

关系运算:

=>(大于等于)、<=(小于等于)

>(大于)、<(小于)、/=(不等于)、= (等于);

关系运算的结果为boolean类型:false、True;

注意:

小于等于符号与信号赋值符号的写法相同,应注意使用位置和意义;

 

连接运算:&

适用类型:

bit、bit_vector(位矢量数据类型)、character、string

std_logic(标准位类型)、std_logic_vector(标准逻辑矢量数据类型)

 

VHDL中库的主要种类:

IEEE库、STD库、ASIC库、

work库、用户定义库;

 

库说明语句格式

Library 库名;

use 库名.包集合名.范围(或项目名);

例:

IEEE库:

library ieee;

use ieee.std_logic_1164.all;使用标准逻辑量的定义和运算;

use ieee.std_logic_unsigned.all;无符号数算术运算的定义;

use ieee.std_logic_arith.all;使用符号数算术运算的定义;

STD库:

ASIC库:

library altera;

use altera.maxplus2.all;

library lpm;

use lpm.lpm_components.all;

WORK库:

use work.all;

 

package包集合

数字电路设计中经常使用的包集合:

ieee.std_logic_1164 逻辑量的定义

ieee.std_logic_arith 数据转换,逻辑判断

ieee.std_logic_unsigned 算术运算

std.textio 文本数据输入/输出格式

 

包的结构与定义:(用户自定义的包集合)

package 包集合名 is

说明语句;(只有名称)

end 包集合名;

包集合体:

package body包集合名 is

说明语句;(完整定义)

end 包集合名;

调用:use work.包集合名.all;

configuration 配置

configuration 配置名 of 实体名 is

for 选择的构造体名

end for;

end 配置名;

 

含有完整程序结构(包含实体和结构体)的VHDL表述称为设计实体;其程序代码常被称为VHDL的RTL描述;

ENTITY、IS、PORT和END ENTITY都是描述实体的关键词,关键词不分大写和小写

BOOLEAN类型的取值分别是:true(真)和false(伪),分别用'1'和'0'表达true和false;

 

程序的文件名尽可能与该程序的实体名一致,原则上文件名不分大小写,但推荐使用小写,特别是后缀;

 

类型STD_LOGIC比BIT包含的内容丰富和完整得多,当然也包含了BIT类型

BIT数据类型定义:TYPE BIT IS('0','1'); --只有两种取值

STD_LOGIC数据类型定义:

TYPE STD_LOGIC IS ('U','X','0','1','Z','W','L','H','-');

STD_LOGIC所定义的9种数据的含义是:'U'表示未初始化的;'X'表示强未知的;'0'表示强逻辑0;'1'表示强逻辑1;'Z'表示高阻态;'W'表示弱未知的;'L'表示弱逻辑0;'H'表示弱逻辑1;'-'表示忽略。

VHDL 标准中规定标准库STD 和工作库WORK 都是默认打开的

 

VHDL通过以下表式来测定某信号的跳变情况:<信号名>'EVENT

例:CLK'EVENT AND CLK = '1'

不完整的条件语句:即在条件语句中,没有将所有可能发生的条件给出对应的处理方式;

 

元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引进一个新的低一级的设计层次;

 

省略赋值操作符(OTHERS=>X)

 

HDL的文本输入方式、原理图输入方式、状态图输入方式、波形输入方式、MATLAB的模型输入方式,以及混合输入方式

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小数分频器是一种常见的电路,能够将输入时钟信号分频为一个小于1的分数。VHDL是硬件描述语言,可以用于设计数字电路。下面是一个小数分频器的VHDL实现。 ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity Fractional_Divider is Port ( CLK_IN : in STD_LOGIC; CLK_OUT : out STD_LOGIC; EN : in STD_LOGIC; RST : in STD_LOGIC; N : in UNSIGNED(9 downto 0); D : in UNSIGNED(9 downto 0)); end Fractional_Divider; architecture Behavioral of Fractional_Divider is signal counter : UNSIGNED(9 downto 0) := (others => '0'); signal div : UNSIGNED(19 downto 0) := (others => '0'); signal clk_div : STD_LOGIC := '0'; begin process (CLK_IN, RST) begin if (RST = '1') then counter <= (others => '0'); div <= (others => '0'); clk_div <= '0'; elsif rising_edge(CLK_IN) then if (EN = '1') then counter <= counter + 1; if (counter = (D - 1)) then counter <= (others => '0'); div <= div + N; clk_div <= not clk_div; end if; end if; end if; end process; CLK_OUT <= clk_div; end Behavioral; ``` 这个小数分频器的输入是一个时钟信号`CLK_IN`,还有一个使能信号`EN`和复位信号`RST`。输出是分频后的时钟信号`CLK_OUT`。`N`和`D`分别是分子和分母,用于计算分数。 在`process`,首先根据复位信号清空计数器和除数寄存器以及分频后的时钟信号。然后在时钟上升沿触发时,如果使能信号为1,则将计数器加1。当计数器计数到D-1时,说明经过了D个时钟周期,需要对除数寄存器加上分数N,并将计数器清零。同时,分频后的时钟信号取反。 最后将分频后的时钟信号赋值给输出端口`CLK_OUT`即可。 这是一个简单的小数分频器的VHDL实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值