100个VHDL实用例程:数字系统设计与应用

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:VHDL是一种用于电子设计自动化的硬件描述语言,适用于描述逻辑门、触发器、时序电路等数字系统。本套100个实用例程深入覆盖VHDL语法和设计流程,特别为初学者提供了实践学习的机会。内容包括VHDL的基本语法结构、数据类型与运算符、进程、组件实例化、组合与时序逻辑、IP核使用、测试平台设计、综合与仿真、设计优化以及数字信号处理应用等。通过这些例程,学习者可以深入理解VHDL在硬件设计中的应用,并掌握相关策略和技巧。 VHDL语言编写的100实用的例程

1. VHDL基础语法结构

1.1 VHDL的设计实体和架构

VHDL(VHSIC Hardware Description Language)作为一种硬件描述语言,其基础语法结构包括设计实体(entity)和架构(architecture)。设计实体是VHDL的最基本单位,定义了外部接口,可以认为是电路模块的“头文件”。架构则描述了实体的行为或结构,可以看作是实体的“实现文件”。

entity example_entity is
    port (
        input_signal : in  std_logic;  -- 输入信号
        output_signal : out std_logic   -- 输出信号
    );
end entity example_entity;

architecture behavior of example_entity is
begin
    -- 逻辑描述
    output_signal <= not input_signal;
end architecture behavior;

在上述代码中, example_entity 是一个设计实体,它有两个端口 input_signal output_signal 。架构 behavior 描述了实体的逻辑行为,这里是一个简单的非门(NOT gate)逻辑。

1.2 信号声明和赋值

在VHDL中,信号的声明和赋值是设计中非常重要的部分。信号可以是内部的(不在端口列表中声明),也可以是外部的(在端口列表中声明)。信号赋值可以在架构内部进行,并影响电路的行为。

architecture detailed of example_entity is
    signal internal_signal : std_logic;  -- 内部信号声明
begin
    process(input_signal)
    begin
        if rising_edge(input_signal) then
            internal_signal <= '1';  -- 在上升沿时赋值
        end if;
    end process;

    output_signal <= internal_signal;  -- 信号赋值
end architecture detailed;

在这个例子中, internal_signal 是一个内部信号,它在 process 块中被赋值,这个过程会在 input_signal 的上升沿触发。 output_signal 则被赋予 internal_signal 的值。

通过这些基础语法,设计师可以构建复杂的硬件描述,进行电路设计和验证。下一章我们将深入探讨VHDL中的数据类型和运算符,这些都是实现复杂电路逻辑的基础。

2. 数据类型与运算符

在本章节中,我们将深入探讨VHDL中的数据类型和运算符,这是进行高效和精确硬件设计的基础。首先,我们会介绍VHDL支持的各种数据类型,包括标量数据类型和复合数据类型,并解释数据类型转换的过程。接着,我们将详细讨论VHDL中的不同运算符,包括算术运算符、逻辑运算符和关系运算符。最后,我们将通过实例来展示如何在VHDL中使用这些运算符,以及如何理解表达式和赋值语句中的运算符优先级和结合性。

2.1 VHDL中的数据类型

2.1.1 标量数据类型

VHDL中的标量数据类型是最基本的数据类型,它们代表了不可分割的单一值。这些包括:

  • 位(bit) bit 类型是VHDL中最基本的标量类型,它有两个可能的值: '0' '1' bit 类型主要用于描述数字逻辑电路的原始信号。
  • 布尔(boolean) boolean 类型用于逻辑值,有两个可能的值: true false boolean 类型常用于条件语句和逻辑运算。
  • 整数(integer) integer 类型表示整数值,范围从$-2^{31}$到$2^{31}-1$。 integer 类型适用于整数运算和数组索引。
  • 自然(natural) natural 类型是 integer 的一个子类型,它只能表示非负整数。
  • 自然数(positive) positive 类型也是 integer 的一个子类型,它表示正整数。

2.1.2 复合数据类型

除了标量类型,VHDL还支持复合数据类型,这些类型是由多个标量值组成的。最重要的复合数据类型包括:

  • 数组(array) :数组是由相同类型的元素组成的集合,可以是一维或多维。例如, std_logic_vector 是一个常见的数组类型,用于表示一系列的 std_logic 值。
  • 记录(record) :记录是由不同类型的元素组成的结构体,每个元素都有自己的名字。这允许将相关数据捆绑在一起形成一个复杂的数据结构。

2.1.3 数据类型转换

在VHDL中,数据类型转换是一个重要的概念,它允许我们将一个数据类型的值转换为另一个数据类型的值。例如,从 bit 转换为 std_logic 。转换通常通过函数实现,如 std_logic_vector 可以使用 std_logic_vector() 函数进行转换。

signal bit_value : bit := '1';
signal slv_value : std_logic;
slv_value := std_logic(bit_value);

在这个例子中,我们将 bit 类型的值转换为 std_logic 类型的值。转换函数 std_logic() bit 类型作为输入,并输出相应的 std_logic 类型。

2.2 VHDL中的运算符

2.2.1 算术运算符

VHDL支持多种算术运算符,包括加( + )、减( - )、乘( * )、除( / )和取模( rem )。这些运算符可以用于整数和其他数值类型的运算。

variable a : integer := 10;
variable b : integer := 5;
variable sum : integer;

sum := a + b;  -- 结果为15

2.2.2 逻辑运算符

逻辑运算符包括逻辑与( and )、逻辑或( or )、逻辑非( not )、逻辑与非( nand )、逻辑或非( nor )和逻辑异或( xor )。这些运算符用于布尔类型的操作。

variable boolean_a : boolean := true;
variable boolean_b : boolean := false;
variable result : boolean;

result := boolean_a and boolean_b;  -- 结果为false

2.2.3 关系运算符

关系运算符用于比较两个值,并返回布尔结果。它们包括等于( = )、不等于( /= )、大于( > )、小于( < )、大于等于( >= )和小于等于( <= )。

variable a : integer := 10;
variable b : integer := 20;
variable comparison : boolean;

comparison := a < b;  -- 结果为true

2.3 运算符的应用实例

2.3.1 表达式和赋值语句

在VHDL中,表达式由运算符和操作数组成,用于计算值。赋值语句用于将表达式的值赋给信号或变量。

signal a : std_logic := '0';
signal b : std_logic := '1';
signal result : std_logic;

result <= a and b;  -- 使用逻辑与运算符

在这个例子中,我们定义了两个 std_logic 类型的信号 a b ,并计算它们的逻辑与结果赋值给 result

2.3.2 运算符优先级和结合性

VHDL中的运算符具有优先级和结合性规则。优先级决定了表达式中不同运算符的执行顺序,结合性决定了相同优先级的运算符如何从左到右或从右到左计算。

| 运算符类型 | 优先级 | 结合性 | | --- | --- | --- | | 关系运算符 | 1(最高) | 从左到右 | | 算术运算符 | 2 | 从左到右 | | 逻辑运算符 | 3 | 从左到右 | | 连接运算符 | 4 | 从左到右 | | 赋值运算符 | 5(最低) | 从右到左 |

理解这些规则对于编写清晰和正确的VHDL代码至关重要。

2.3.3 运算符的使用案例分析

在本章节介绍的过程中,我们通过一个简单的案例分析来展示如何在VHDL中使用运算符。假设我们需要设计一个简单的数字电路,该电路能够计算两个整数输入的和,并将其输出到另一个整数信号。

entity adder is
    port(
        a : in integer;
        b : in integer;
        sum : out integer
    );
end adder;

architecture behavior of adder is
begin
    process(a, b)
    begin
        sum <= a + b;  -- 使用加法运算符计算和
    end process;
end behavior;

在这个例子中,我们定义了一个名为 adder 的实体,它有两个输入端口 a b ,以及一个输出端口 sum 。在行为架构中,我们定义了一个进程,该进程在输入信号 a b 发生变化时被触发,并计算它们的和,然后将其赋值给输出信号 sum

2.3.4 小结

在本章节中,我们介绍了VHDL中的数据类型和运算符,这些是进行硬件设计的基础。我们讨论了标量数据类型和复合数据类型,以及如何进行数据类型转换。此外,我们详细讨论了算术、逻辑和关系运算符,并通过实例展示了如何在VHDL中使用这些运算符。理解这些概念对于编写高效和可靠的VHDL代码至关重要。

通过本章节的介绍,我们应该能够理解VHDL中数据类型和运算符的基本概念,并能够在实际的硬件设计中应用这些知识。在下一章节中,我们将探讨VHDL中的重要概念——时序控制和进程。

3. 时序控制中的进程

在数字电路设计中,时序控制是实现复杂逻辑和功能的关键。VHDL中的进程(Process)是一种强大的结构,它允许设计者以一种结构化的方式编写时序逻辑。本章我们将详细探讨时序控制的概念,如何创建和使用进程,以及一些时序逻辑电路设计的实例。

3.1 时序控制的概念

时序控制是指电路中的信号操作按照时钟信号的时间节拍进行控制。在数字设计中,时钟信号是推动数据流动和状态转换的脉冲信号。正确理解和应用时序控制对于设计可靠的数字系统至关重要。

3.1.1 时钟信号与触发器

时钟信号是时序控制的核心。它提供了一个规律性的、准确的时间基准,使得电路中的操作可以按照预设的时间间隔进行。触发器(Flip-Flop)是时序逻辑电路中最基本的存储元件,它可以在时钟信号的边沿触发,存储一个比特的数据。

  • D触发器 是最常用的触发器类型,其输出(Q)在每个时钟上升沿或下降沿时,会变为输入(D)的值。
  • JK触发器 是一种通用的触发器,可以通过J和K输入端的设置来控制输出,实现各种触发行为。
  • T触发器 是一种切换触发器,它的输出会在每个时钟边沿进行翻转。

3.1.2 状态机设计基础

状态机是一种用于处理输入序列,并根据当前状态和输入来确定输出和下一状态的逻辑电路模型。它在数字电路设计中非常重要,特别是在设计需要根据输入数据序列进行决策和变化的电路时。

  • Mealy状态机 的输出不仅依赖于当前状态,还依赖于输入。
  • Moore状态机 的输出仅依赖于当前状态,因此输出变化相对缓慢,但电路更简单,更稳定。

3.2 进程的创建与使用

进程是VHDL中一个用于描述复杂时序逻辑的基本构造块。它将一些相关的语句组合在一起,并定义了一个敏感列表,以响应特定事件或信号的变化。

3.2.1 进程的结构和语法

进程的声明以 process 关键字开始,后跟一个可选的敏感列表。如果未明确指定敏感列表,则必须在进程内部明确描述触发条件。

process(sensitivity_list)
begin
    -- 语句
end process;
  • 敏感列表 定义了哪些信号的变化将触发进程的重新执行。在敏感列表中列出的信号发生变化时,进程会重新启动并执行其内部的所有语句。

3.2.2 进程中的敏感列表

敏感列表的作用类似于触发器对时钟信号的响应。正确的敏感列表可以确保进程中的代码在适当的时间执行。例如,在处理时钟边沿触发的电路时,敏感列表应包括时钟信号。

process(clk, rst)
begin
    if rst = '1' then
        -- 同步复位逻辑
    elsif rising_edge(clk) then
        -- 时钟上升沿处理逻辑
    end if;
end process;

在这个例子中,进程对 clk rst 信号敏感,任何这些信号的变化都会重新评估进程。

3.3 时序逻辑电路设计实例

在本小节中,我们将通过一些设计实例来加深对时序控制和进程的理解。

3.3.1 计数器设计

计数器是数字系统中常见的时序逻辑电路。以下是使用VHDL描述的模4上升沿触发计数器的一个例子。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity counter is
    Port ( clk : in STD_LOGIC;
           reset : in STD_LOGIC;
           count : out STD_LOGIC_VECTOR(1 downto 0));
end counter;

architecture Behavioral of counter is
    signal temp_count : STD_LOGIC_VECTOR(1 downto 0) := "00";
begin
    process(clk, reset)
    begin
        if reset = '1' then
            temp_count <= "00";
        elsif rising_edge(clk) then
            temp_count <= temp_count + 1;
        end if;
    end process;

    count <= temp_count;
end Behavioral;

该代码实现了一个简单的上升沿触发计数器,其计数范围从0到3。当 reset 信号被激活时,计数器会被同步复位到0。每次时钟信号的上升沿,计数器的值会增加1。

3.3.2 寄存器和移位寄存器

寄存器和移位寄存器是时序电路中的另外两个基本组件。寄存器用于存储数据,而移位寄存器则具有数据串行输入和串行输出的特性。

一个简单的寄存器描述如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity register is
    Port ( clk : in STD_LOGIC;
           data_in : in STD_LOGIC_VECTOR(7 downto 0);
           data_out : out STD_LOGIC_VECTOR(7 downto 0));
end register;

architecture Behavioral of register is
begin
    process(clk)
    begin
        if rising_edge(clk) then
            data_out <= data_in;
        end if;
    end process;
end Behavioral;

该代码创建了一个8位数据输入和输出的寄存器,数据在每个时钟上升沿被锁存并传递到输出端。

一个4位的移位寄存器实例代码如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity shift_register is
    Port ( clk : in STD_LOGIC;
           data_in : in STD_LOGIC;
           data_out : out STD_LOGIC_VECTOR(3 downto 0));
end shift_register;

architecture Behavioral of shift_register is
    signal temp_data : STD_LOGIC_VECTOR(3 downto 0) := "0000";
begin
    process(clk)
    begin
        if rising_edge(clk) then
            temp_data <= temp_data(2 downto 0) & data_in;  -- Shift left and input new bit on the right
        end if;
    end process;
    data_out <= temp_data;
end Behavioral;

在每个时钟上升沿,数据会左移一位,并将新的输入数据放置在最右端的位。

通过这些实例,我们可以了解到如何使用进程来构建时序控制逻辑,并且看到VHDL的强大功能能够使我们以结构化的方式创建复杂的时序电路。接下来,我们将探讨如何通过组件实例化来设计更复杂的数字电路。

4. 组件实例化方法

组件实例化是数字电路设计中一个重要的概念,它允许设计者通过引用预先定义好的硬件模块(即组件)来构建更复杂的电路。这种模块化设计方法提高了设计的可重用性,同时降低了设计的复杂性。在VHDL中,组件实例化的过程涉及到几个关键步骤,包括组件的定义、声明,以及实际的实例化语法和信号连接。

4.1 组件的概念与声明

4.1.1 组件的定义和端口映射

组件定义是VHDL中实现模块化设计的基础。一个组件本质上是一个独立的模块,它拥有自己的接口和功能。组件的接口由端口定义,这些端口可以是输入(in)、输出(out)、双向(inout)或信号(buffer)类型。在组件定义内部,可以指定端口的类型和方向。

component my_component
    Port ( 
        a : in std_logic;
        b : in std_logic;
        c : out std_logic
    );
end component;

在上面的例子中,定义了一个名为 my_component 的组件,它有两个输入端口 a b ,以及一个输出端口 c 。端口的数据类型被指定为 std_logic

4.1.2 库和使用声明

在实例化组件之前,设计者需要声明使用的组件所属于的库。这通常涉及到在VHDL文件的开始使用 library 语句来引入组件定义所在的库。如果组件定义已经在当前的项目库中,那么可以直接声明使用该组件。

library my_design_lib;
use my_design_lib.my_component;

在实例化组件之前,确保已经在使用声明中包含了组件定义所在的库,这样设计者在实例化时就可以直接引用组件名。

4.2 实例化的语法结构

4.2.1 实例化的语法规则

组件实例化类似于在面向对象编程语言中的对象创建。在VHDL中,实例化组件时,必须给出一个实例名称,并指定端口映射。端口映射可以是位置相关或名称相关,建议使用名称相关映射以增加代码的可读性。

my_instance : my_component
    port map (
        a => input_signal1,
        b => input_signal2,
        c => output_signal
    );

在这个例子中, my_instance 是实例名称, a b c my_component 组件的端口名称,而 input_signal1 input_signal2 output_signal 是与之相连接的信号。

4.2.2 信号连接和命名

信号连接和命名是组件实例化过程中的关键环节,确保了信号的正确传递。在端口映射时,可以使用命名关联或位置关联的方式。命名关联通过端口名称直接指定信号,而位置关联则按照组件端口定义的顺序指定信号,但风险是容易出错。

-- 命名关联示例
my_instance : my_component
    port map (
        a => input_signal1,  -- 映射到端口a
        b => input_signal2,  -- 映射到端口b
        c => output_signal   -- 映射到端口c
    );

-- 位置关联示例(不推荐,仅作对比)
my_instance : my_component
    port map (
        input_signal1,  -- 自动映射到第一个端口a
        input_signal2,  -- 自动映射到第二个端口b
        output_signal   -- 自动映射到第三个端口c
    );

4.3 组件实例化的设计实例

4.3.1 分频器的设计与实例化

分频器是数字逻辑设计中的一个常见组件,它将输入时钟频率除以一定的比率。例如,一个2分频器将输入时钟的频率降至一半。下面是一个简单的2分频器组件定义和实例化示例。

-- 分频器组件定义
component divide_by_two
    Port (
        clk_in : in std_logic;
        clk_out : out std_logic
    );
end component;

-- 实例化分频器组件
my_divider : divide_by_two
    port map (
        clk_in => main_clk,
        clk_out => divided_clk
    );

在这个例子中, divide_by_two 组件有两个端口: clk_in clk_out 。实例名称是 my_divider ,它将一个名为 main_clk 的时钟信号分频,并将结果输出到名为 divided_clk 的信号。

4.3.2 复杂模块的分层设计

在复杂设计中,组件的分层实例化可以提高设计的可读性和可维护性。通过在不同的抽象层次上实例化组件,设计者可以创建出清晰的层次结构。下面是一个复杂模块的分层设计示例。

-- 最高层模块
library my_design_lib;
use my_design_lib.all;

entity top_level is
    Port (
        clk : in std_logic;
        reset : in std_logic;
        data_in : in std_logic_vector(7 downto 0);
        data_out : out std_logic_vector(7 downto 0)
    );
end top_level;

architecture Structural of top_level is
    component sub_module_a
        Port ( ... );
    end component;
    component sub_module_b
        Port ( ... );
    end component;
    -- 实例化子模块
    signal sub_a_out, sub_b_out : std_logic_vector(7 downto 0);
begin
    sub_module_a_inst : sub_module_a
        port map ( ... );
    sub_module_b_inst : sub_module_b
        port map ( ... );
    -- 更多信号连接和顶层逻辑
end Structural;

在这个例子中,顶层模块 top_level 实例化了两个子模块 sub_module_a sub_module_b 。这种层次化的设计方法不仅使得设计易于理解,还方便了模块的独立测试和重用。

通过本章节的介绍,我们可以了解到组件实例化在VHDL设计中的重要性和实现方法。下一章节将讨论组合逻辑与时序逻辑电路设计的概念、优化以及具体的设计实例。

5. 组合逻辑与时序逻辑电路

在数字电路设计中,组合逻辑和时序逻辑是两个基本的逻辑类型。它们在VHDL中的设计和实现对于构建高效的电路至关重要。本章将深入探讨这两种逻辑电路的设计方法,并通过实例进行分析和优化。

5.1 组合逻辑电路设计

组合逻辑电路是由基本的逻辑门(如AND, OR, NOT等)组合而成,输出仅依赖于当前输入的电路。在VHDL中,设计组合逻辑电路通常涉及到逻辑门的描述和逻辑函数的优化。

5.1.1 逻辑门和逻辑函数

逻辑门是实现基本逻辑运算的电子设备,它们是组合逻辑电路的基础。在VHDL中,逻辑门可以通过内置的逻辑运算符来实现,例如:

signal A, B, C, D : std_logic;
begin
  C <= A AND B;  -- 实现与门
  D <= A OR B;   -- 实现或门
end behavioral;

逻辑函数是对逻辑门功能的抽象,它们描述了输出与输入之间的逻辑关系。在VHDL中,可以使用 case 语句或者 when-else 结构来描述逻辑函数,例如:

signal X, Y : std_logic_vector(1 downto 0);
signal Z : std_logic;
begin
  process(X)
  begin
    case X is
      when "00" => Z <= '0';
      when "01" => Z <= '1';
      when others => Z <= 'X';
    end case;
  end process;
end behavioral;

5.1.2 组合逻辑的优化

组合逻辑电路的优化目标是减少延迟、降低资源消耗以及提高电路的可维护性。优化策略包括:

  • 合并同类项 :通过布尔代数简化逻辑表达式。
  • 使用查找表 :对于复杂的逻辑函数,可以使用ROM作为查找表实现。
  • 流水线化 :将组合逻辑分成多个阶段,减少每个阶段的逻辑深度。

5.2 时序逻辑电路设计

时序逻辑电路不仅依赖当前输入,还依赖于之前的状态。在VHDL中,时序逻辑电路通常由进程(process)和触发器(如Flip-Flops)组成。

5.2.1 触发器和锁存器

触发器是时序逻辑电路的核心元件,它可以根据时钟信号的边沿改变状态。VHDL中可以使用 if 语句和 case 语句来描述触发器的行为。例如,一个简单的D触发器可以这样描述:

signal D, Q, Clk : std_logic;
begin
  process(Clk)
  begin
    if rising_edge(Clk) then
      Q <= D;
    end if;
  end process;
end behavioral;

锁存器在没有时钟信号的情况下,当使能信号有效时改变状态,可以使用 if 语句描述。

5.2.2 时钟域交叉问题

时钟域交叉(CDC)问题是指在不同时钟域之间的信号传递可能导致的不稳定问题。解决CDC问题的方法包括:

  • 使用双触发器同步 :确保信号从一个时钟域传递到另一个时钟域时,通过两个触发器同步。
  • 使用握手信号 :设计同步机制,确保数据在时钟域之间安全传递。

5.3 设计实例与分析

5.3.1 设计案例分析

考虑一个简单的状态机设计,该状态机具有三个状态:等待(Wait)、读取(Read)和写入(Write)。状态转移逻辑可以用 case 语句实现。

type state_type is (Wait, Read, Write);
signal current_state, next_state : state_type;
signal clk, reset : std_logic;
begin
  process(clk, reset)
  begin
    if reset = '1' then
      current_state <= Wait;
    elsif rising_edge(clk) then
      current_state <= next_state;
    end if;
  end process;
  process(current_state)
  begin
    case current_state is
      when Wait =>
        -- 等待逻辑
      when Read =>
        -- 读取逻辑
      when Write =>
        -- 写入逻辑
    end case;
  end process;
end behavioral;

5.3.2 性能优化与调试

性能优化和调试是设计过程中的重要环节。通过以下步骤进行性能优化:

  • 代码重构 :简化逻辑,减少不必要的操作。
  • 使用生成语句 :对于重复的逻辑结构,使用 for generate if generate 进行优化。
  • 仿真和分析 :使用仿真工具检查电路的行为,分析波形图,定位问题。

调试通常涉及到设置断点、观察信号值以及单步执行代码。使用专业的仿真工具可以更方便地进行这些操作。

通过上述内容,我们可以看到VHDL在设计组合逻辑和时序逻辑电路时的强大功能。通过合理的代码编写和优化策略,可以设计出高效且可靠的数字电路系统。在下一章节中,我们将探讨组件实例化方法,这是构建复杂数字系统的关键技术。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:VHDL是一种用于电子设计自动化的硬件描述语言,适用于描述逻辑门、触发器、时序电路等数字系统。本套100个实用例程深入覆盖VHDL语法和设计流程,特别为初学者提供了实践学习的机会。内容包括VHDL的基本语法结构、数据类型与运算符、进程、组件实例化、组合与时序逻辑、IP核使用、测试平台设计、综合与仿真、设计优化以及数字信号处理应用等。通过这些例程,学习者可以深入理解VHDL在硬件设计中的应用,并掌握相关策略和技巧。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

包括如下100有关的VHDL描述文件,但解压后只有94,其他部分错误 第1?带控制端口的加法器 袁 媛(1) 第2?无控制端口的加法器 袁 媛(4) 第3?乘法器 袁 媛(6) 第4?比较器 袁 媛(8) 第5?二路选择器 袁 媛(11) 第6?寄存器 袁 媛(13) 第7?移位寄存器 袁 媛(16) 第8?综合单元库 袁 媛(22) 第9?七值逻辑基本数据类型 袁 媛(29) 第10?函数 袁 媛(32) 第11?七值逻辑线或分辨函数 袁 媛(35) 第12?转换函数 袁 媛(38) 第13?左移函数 袁 媛(40) 第14?七值逻辑程序包 袁 媛(42) 第15?四输入多路器 陈东瑛(51) 第16?目标选择器 吴清平(57) 第17?奇偶校验器 陈东瑛(61) 第18?映射单元库及其使用举 陈东瑛(69) 第19?循环边界常数化测试 陈东瑛(75) 第20?保护保留字 袁 媛(77) 第21?进程死锁 刘沁楠(79) 第22?振荡死锁 袁 媛(81) 第23?振荡电路 刁岚松(83) 第24?分辨信号分辨函数 袁 媛(87) 第25?信号驱动源 刘沁楠(92) 第26?属性TRANSACTION和分辨信号 陈东瑛(96) 第27?块保护及属性EVENT,STABLE 陈东瑛(101) 第28?形式参数属性的测试 刘沁楠(104) 第29?进程和并发语句 刁岚松(107) 第30?信号发送接收 刁岚松(111) 第31?中断处理优先机制建模 吴清平(113) 第32?过程限定 刘沁楠(116) 第33?整数比较器及其测试 刘沁楠(119) 第34?数据总线的读写 刁岚松(129) 第35?基于总线的数据通道 李 春(134) 第36?基于多路器的数据通道 李 杰(148) 第37?四值逻辑函数 袁 媛(152) 第38?四值逻辑向量按位或运算 刁岚松(156) 第39?生成语句描述规则结构 袁 媛(159) 第40?带类属的译码器描述 袁 媛(164) 第41?带类属的测试平台 袁 媛(169) 第42?行为结构的混合描述 袁 媛(171) 第43?四位移位寄存器 .刘沁楠(174) 第44?寄存/计数器 袁 媛(185) 第45?顺序过程调用 陈东瑛(189) 第46?VHDL中generic缺省值的使用 王作建(191) 第47?无输入元件的模拟 王作建(196) 第48?测试激励向量的编写 袁 媛(201) 第49?delta延迟释 吴清平(206) 第50?惯性延迟分析 吴清平(210) 第51?传输延迟驱动优先 陈东瑛(213) 第52?多倍(次)分频器 刁岚松(216) 第53?三位计数器测试平台 刘沁楠(220) 第54?分秒计数显示器的行为描述 陈东瑛(226) 第55?地址计数器 陈东瑛(234) 第56?指令预读计数器 吴清平(242) 第57?加、减、乘指令的译码和操作 吴清平(245) 第58?2-4译码器结构描述 刘沁楠(248) 第59?2-4译码器行为描述 吴清平(255) 第60?转换函数在元件示中的应用 王作建(258) 第61?基于同一基类型的两分辨类型的赋值相容问题 王作建(261) 第62?最大公约数的计算 刁岚松(266) 第63?最大公约数七段显示器编码 吴清平(269) 第64?交通灯控制器 吴清平(272) 第65?空调系统有限状态自动机 刁岚松(276) 第66?FIR滤波器 谢 巍(280) 第67?五阶椭圆滤波器 刘沁楠(290) 第68?闹钟系统的控制器 张东晓(302) 第69?闹钟系统的译码器 陈东瑛(311) 第70?闹钟系统的移位寄存器 陈东瑛(315) 第71?闹钟系统的闹钟寄存器和时间计数器 陈东瑛(317) 第72?闹钟系统的显示驱动器 陈东瑛(322) 第73?闹钟系统的分频器 陈东瑛(325) 第74?闹钟系统的整体组装 张东晓(327) 第75?存储器 李 春(333) 第76?电机转速控制器 张俭锋(337) 第77?神经元计算机 袁 媛(343) 第78?Am2901四位微处理器的ALU输入 韩 曙(347) 第79?Am2901四位微处理器的ALU 韩 曙(353) 第80?Am2901四位微处理器的RAM 韩 曙(359) 第81?Am2901四位微处理器的寄存器 韩 曙(363) 第82?Am2901四位微处理器的输出移位 韩 曙(365) 第83?Am2910四位微程序控制器中的多路选择器 韩 曙(370) 第84?Am2910四位微程序控制器中的计数器/寄存器 韩 曙(374) 第85?Am2910四位微程序控制器的指令计数器 韩 曙(379) 第86?Am2910四位微程序控制器的堆栈 韩 曙(382) 第87?Am2910四位微程序控制器的指令译码器 韩 曙(390) 第88?可控制计数器 韩 曙(399) 第89?四位超前进位加法器 韩 曙(406) 第90?实现窗口搜索算法的并行系统(1)--协同处理器 李 杰(410) 第91?实现窗口搜索算法的并行系统(2)--序列存储器 李 杰(416) 第92?实现窗口搜索算法的并行系统(3)--字符串存储器 李 春(419) 第93?实现窗口搜索算法的并行系统(4)--顶层控制器 李 春(422) 第94?MB86901流水线行为描述组成框架 石 峰(428) 第95?MB86901寄存器文件管理的描述 石 峰(434) 第96?MB86901内ALU的行为描述 石 峰(437) 第97?移位指令的行为描述 石 峰(440) 第98?单周期指令的描述 石 峰(442) 第99?多周期指令的描述 石 峰(445) 第100? MB86901流水线行为模型 石 峰(458)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值