VHDL简述

VHDL简述


这学期学了相关课程,要用到vhdl,简单记录一下用到的一些东西。

1. VHDL基本结构
2. 运算符
3. 赋值符号
4. 并行语句
5. 元件例化



1. VHDL基本结构

VHDL的基本结构包括库声明、实体声明和架构体等部分。

  • 库声明:包含使用的库和包。
  • 实体声明:定义了模块的接口,包括端口。
  • 架构体:描述了实体的内部实现。

一个简单的VHDL示例:LED闪烁
-- 库声明
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- 实体声明
entity LED_Blink is
    Port (
        clk : in STD_LOGIC;  -- 输入时钟
        reset : in STD_LOGIC; -- 复位信号
        led : out STD_LOGIC  -- 输出LED控制信号
    );
end LED_Blink;

-- 架构体
architecture Behavioral of LED_Blink is
    signal led_state : STD_LOGIC := '0'; -- 定义内部信号
begin
    process(clk, reset)
    begin
        if reset = '1' then
            led_state <= '0'; -- 复位时LED熄灭
        elsif rising_edge(clk) then
            led_state <= not led_state; -- 每个时钟上升沿翻转LED状态
        end if;
    end process;

    led <= led_state; -- 将内部信号连接到输出端口
end Behavioral;

解释

  • 库声明:引用了IEEE标准库STD_LOGIC_1164,它定义了STD_LOGIC类型。

  • 实体声明:定义了模块LED_Blink,它有三个端口:输入时钟clk,复位信号reset和输出led。

  • 架构体:定义了模块的行为。

    • 内部信号led_state:用于存储LED的当前状态,初始化为0。
    • 过程块process(clk, reset):当复位信号为1时,将LED状态设置为0(LED熄灭)。在时钟上升沿,翻转LED状态。
    • 信号赋值:将内部信号led_state的值赋给输出端口led。



2. 运算符


/=: 不等运算。例如:a /= b。

&: 例如:a & b,将a和b拼接成一个更长的向量。

其他大多与c语言类似。




3. 赋值符号


  • 信号赋值符号 (<=)
    • 用于将一个值赋给信号(signal)。
    • 这种赋值是延迟的,即在当前进程(process)完成时才会生效。
signal my_signal : std_logic;
my_signal <= '1';

  • 变量赋值符号 (:=)
    • 用于将一个值赋给变量(variable)。
    • 这种赋值是立即生效的。
variable my_variable : integer;
my_variable := 10;

  • 常量赋值符号 (:=)
constant my_constant : integer := 5;

  • 端口映射赋值符号 (=>)
    • 用于在端口映射(port map)或生成映射(generate map)时,连接实际信号到端口。
U1: entity work.my_entity
port map (
   clk => clk_sig,
   reset => reset_sig
);



4. 并行语句


  • 并行信号赋值语句

并行信号赋值语句用于为信号赋值,并且这些赋值是并行执行的。

signal a, b, c : std_logic;
signal d : std_logic;

a <= '1';
b <= a;
c <= b;
d <= c;

在上面的例子中,所有赋值操作是并行执行的。


  • 并行选择信号赋值语句

并行选择信号赋值语句允许根据条件选择性的为信号赋值。

signal sel : std_logic_vector(1 downto 0);
signal y : std_logic;

with sel select
    y <= '0' when "00",
         '1' when "01",
         'Z' when "10",
         'X' when others;

  • 生成语句(Generate Statement)

生成语句用于在结构描述中创建多个相同的实例。

gen_label: for index in range generate
    -- 并行语句
end generate;

  • 并行进程语句(Process Statement)

进程语句用于描述一组在某些事件(例如信号变化)触发时执行的并行操作。

process1 (sensitivity_list)
begin
    -- 顺序语句
end process1;

process2 (sensitivity_list)
begin
    -- 顺序语句
end process2;

process1和process2是并行的。


  • 并行块语句(Block Statement)

块语句用于将一组并行语句组合在一起,并为其提供一个局部作用域。

block_label: block
    signal declarations;
begin
    -- 并行语句
end block;



5. 元件例化


将已经设计好的模块,封装为元件,然后在新的设计实体中调用该元件,构成层次化的设计。

元件声明元件例化 组成。

元件定义是将已经完成的设计实体封装为一个元件,是在 architecture 和 begin 关键字之间用 component 语句完成。

元件例化就是调用该元件,一般通过 port map 端口映射语句实现对应。

举例如下:


  • 元件声明
component my_component is
    port (
        a : in std_logic;
        b : in std_logic;
        y : out std_logic
    );
end component;

有一个元件叫做my_component,它有两个输入信号和一个输出信号.


  • 元件例化
label: my_component
    port map (
        a => signal_a,
        b => signal_b,
        y => signal_y
    );

label是该实例的标签,可以任意取名,my_component是元件的名称,port map用于将实体的端口连接到具体的信号。这里采用名称关联。


  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值