澳门在线和VHDL:通过示例解释

上次,我详细介绍了什么是FPGA编程,以及如何开始进行FPGA设计。简史 澳门在线 甚高密度脂蛋白 还进行了讨论。如果您搜索澳门在线和VHDL之间的差异,您会看到许多讨论该HDL语言战争的差异页面,但是其中大多数页面简短,并没有为促进初学者或学生的理解而举例说明。

和...之间的不同 澳门在线甚高密度脂蛋白 本文将通过示例详细说明。的优缺点 澳门在线甚高密度脂蛋白 还将进行讨论。

澳门在线和VHDL:举例说明

HDL建模能力: 澳门在线 甚高密度脂蛋白

首先,让我们讨论一下澳门在线和VHDL的硬件建模能力,因为它们都是用于建模硬件的硬件描述语言。

下图根据硬件抽象的行为级别显示了澳门在线和VHDL的HDL建模能力。 
澳门在线与VHDL建模能力
图表来源:Douglas J. Smith,“ 甚高密度脂蛋白& 澳门在线 Compared & Contrasted Plus 以VHDL,澳门在线和C编写的建模示例”

低级建模 

如上图所示,澳门在线和VHDL都可以对硬件进行建模。然而, 在底层硬件建模方面, 澳门在线 胜过 甚高密度脂蛋白。这是合理的,因为澳门在线最初是为建模和仿真逻辑门而创建的。实际上,澳门在线具有内置的原语或低级逻辑门,因此设计人员可以在VHDL没有的情况下以澳门在线代码实例化原语。

澳门在线的Gate原语: 和,nand,或,也不,xor,xnor,buf,not,bufif0,notif0,bufif1,notif1,上拉,下拉.
澳门在线的切换原语: pmos,nmos,rpmos,rnmos,cmos,rcmos,tran,rtran,tranif0,rtranif0,tranif1,rtranif1.
更重要的是,澳门在线支持用户定义的基元(UDP),以便设计人员可以定义自己的单元基元。对于ASIC设计人员来说,此功能特别必要且很受欢迎。
以下是有关如何在澳门在线代码中实例化门原语的澳门在线示例:
or #5 u1(x,y,z);
 #10 u2(i1,i2,i3);
ADC_CIRCUIT u3(in1,out1,out2,clock); 
// ADC_CIRCUIT is an User-Defined Primitive for 
// Analog 至  Digital Converter for example.
可以通过使用诸如NOT,AND,NAND,OR,NOR,XOR,XNOR之类的逻辑运算符来实现澳门在线中某些低级内置门基元的VHDL等效项。 
以下是澳门在线门原语的VHDL等效代码示例:
or u1(x,y,z); in 澳门在线 <=> x <= y OR z; in 甚高密度脂蛋白
 u2(i1,i2,i3); (澳门在线) <=> i3 <= i2 AND i3; in 甚高密度脂蛋白
为了支持像澳门在线中一样的UDP功能,VITAL(面向ASIC库的VHDL倡议)问世,使ASIC设计人员可以在兼容VITAL的VHDL中创建自己的单元基元或ASIC库,如上图所示。即使VHDL仍可能无法实现澳门在线可以支持的底层硬件建模。因此,如果我是ASIC设计师,我会更喜欢澳门在线而不是VHDL。

高级建模

另一方面, 如所提到的图表所示,在高级硬件建模方面,VHDL比澳门在线更好。与澳门在线相比,VHDL为高级硬件建模提供了更多功能和构造。以下是支持的主要不同功能 比较VHDL和澳门在线时的高级硬件建模:

  • 甚高密度脂蛋白中的用户定义数据类型

澳门在线 具有非常简单的数据类型,并且全部由澳门在线语言定义(用户无法在澳门在线中定义自己的数据类型)。 澳门在线有两种主要数据类型,包括网络数据类型(用于将组件连接在一起,例如 电线(最流行),wor,wand,tri,trior等。)和可变数据类型(用于临时存储,例如 reg(最流行),整数,时间,实时和实时). 

甚高密度脂蛋白 支持许多不同的数据类型,包括预定义的VHDL数据类型和用户定义的数据类型。预定义的VHDL数据类型包括bit,bit_vector,字符串,时间,布尔值,字符和数字(实数或整数)。 甚高密度脂蛋白允许设计人员根据预定义的VHDL数据类型定义不同的类型。对于可能使用许多不同数据类型的复杂高级系统来说,这是一个很好的功能。以下是用于定义新数据类型的VHDL代码示例:

type int_8bit is range 0  255 -- define 8-bit unsigned numbers
signal i : int_8bit;
type state_FSM is (Idle, start, calculate , finish, delay) 
-- define symbolic states 至  represent FSM states.
signal current_state, next_state: state_FSM;

  • 甚高密度脂蛋白中的设计重用包

甚高密度脂蛋白中的软件包通常用于数据类型和子程序的声明。 甚高密度脂蛋白包中声明的子程序或数据类型可以在许多不同的实体或体系结构中使用。例如:
package fsm_type is 
type FSM_states is (IDLE, TRANSMIT, RECEIVE, STOP);
end package
--  use the FSM_states type in an entity or architecture
-- use the following statement on 至 p of the entity
use work.fsm_type.all
entity example is
澳门在线中没有包定义。与VHDL软件包最接近的澳门在线是 `包括 澳门在线编译器指令。可以将函数或定义分别保存在另一个文件中,然后通过使用 `包括 指示。以下是澳门在线示例代码:
// Below is the content of "澳门在线VsVHDL.h" file
`定义 INPUT_VERILOG ”。/test_澳门在线vsVHDL.hex" // Input file name 
`定义 OUTPUT_VHDL "甚高密度脂蛋白.bmp" // Output file name 
`定义 VERILOG_VHDL_DIFFERENCE

// Then call it in every single module that you want 至  use the definition above
`包括 "澳门在线VsVHDL.h"

  • 甚高密度脂蛋白中的配置声明

一个VHDL设计可以为一个实体获得许多具有不同体系结构的设计实体。配置语句将确切的设计实体与设计中的组件实例相关联。当一个实体中有多个体系结构时,配置语句会继续指定将所需的设计体系结构分配给该实体以进行综合或仿真。当VHDL设计人员需要管理大型高层设计时,此功能非常有用。 
以下是配置语句的VHDL示例代码:
entity BUF is
  generic (DELAY : TIME := 10 ns);
  port ( BUF_IN : in BIT; BUF_OUT : out BIT);
end BUF;
-- The first design architecture for BUF 
architecture STRUCT_BUF1 of BUF is
signal temp: bit;
begin
  BUF_OUT <= not temp after DELAY;
  temp <= not BUF_IN after DELAY;
end STRUCT_BUF1;
-- The second design architecture for BUF 
architecture STRUCT_BUF2 of BUF is
begin
  BUF_OUT <= BUF_IN after 2*DELAY;;
end STRUCT_BUF2;
-- Testbench 至  simulate BUF entity 
entity BUF_TESTBENCH is 
end BUF_TESTBENCH;
architecture STRUCT_BUF_TEST of BUF_TESTBENCH is
signal TEST1, TEST2 : BIT := '1';
-- BUF_COMP component declaration:
component BUF_COMP is
  generic (TIME_DELAY : TIME);
  port ( IN1 : in BIT; OUT1 : out BIT );
end component;
begin
  -- instantiation of BUF_COMP component:
  DUT:BUF_COMP generic map (10 ns) port map (TEST1,TEST2);
end STRUCT_BUF_TEST;

-- Configuration specify the design entity 和 architecture
-- for the DUT component instance in the testbench above
configuration CONFIG_BUF of TEST_BUF is
-- Associate BUF_COMP component instance 至  BUF design entity
-- 和 STRUCT_BUF1 design architecture for simulation 
for STRUCT_BUF_TEST 
  for DUT : BUF_COMP 
    use entity WORK.BUF (STRUCT_BUF1)
    generic map (DELAY => TIME_DELAY)
    port map (BUF_IN => IN1, BUF_OUT => OUT1);
  end for;
end for ;
end CONFIG_BUF;

配置块也已添加到澳门在线-2001。

  • 甚高密度脂蛋白中的图书馆管理

同时查看澳门在线和VHDL代码时,最明显的区别是澳门在线没有库管理,而VHDL确实在代码顶部包括了设计库。 甚高密度脂蛋白库包含编译的体系结构,实体,程序包和配置。在管理大型设计结构时,此功能非常有用。 甚高密度脂蛋白中的软件包和配置示例已在上面给出。以下是VHDL中用于库管理的VHDL示例代码:
-- library management in 甚高密度脂蛋白
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;
use work.clock_div.all;

简而言之,VHDL在高级硬件建模方面比澳门在线更好。由于FPGA设计流程不需要底层硬件建模,因此如果我是FPGA设计人员,我会更倾向于VHDL而不是澳门在线。 

值得一提的是,System澳门在线的创建是通过向澳门在线添加VHDL中的高级功能和构造来进行验证,从而增强了澳门在线语言在高级建模中的弱点。 System澳门在线现在被广泛用于IC验证。

详细:澳门在线与VHDL

  • 甚高密度脂蛋白是 强类型 与 澳门在线是松散类型的

甚高密度脂蛋白是一种非常强类型的硬件描述语言,因此必须使用匹配和定义的数据类型正确编写VHDL代码。这意味着如果您混合使用数据类型或不匹配,将出现编译器错误 信号 在VHDL中分配时。另一方面,澳门在线是一种松散类型的语言。在澳门在线中,分配时可以混合使用数据类型或信号不匹配。以下是用于信号不匹配的VHDL示例代码:
signal test_reg1:  std_logic_vector(3 downto 0); 
signal test_reg2:  std_logic_vector(7 downto 0); 
test_reg2 <= test_reg1;
-- You cannot assign a 4-bit signal 至  an 8-bit signal 
-- in 甚高密度脂蛋白, it will introduce a syntax error below:
-- 宽度不匹配。预期宽度8,实际宽度为4 
-- for dimension 1 of test_reg1.
编译上面的VHDL代码时,将出现语法错误 "宽度不匹配。预期宽度8,实际宽度为4”。 如果VHDL代码更改为“test_reg2<= "0000"&test_reg1;" 用于匹配位宽, 不会有语法错误。 
如果在澳门在线中将4位信号分配给8位信号怎么办?
  wire [3:0] test1;
  wire [7:0] test2;
  // In 澳门在线, you can assign 4-bit signal 至  8-bit signal.
  assign test2 = test1;
  // there will be no syntax error during synthesis 
当您将4位信号分配给8位信号时,澳门在线 Compiler不会引入语法错误。在澳门在线中,可以将具有不同位宽的信号彼此分配。 澳门在线编译器将使源信号的宽度适应目标信号的宽度。未使用的位将在合成期间进行优化。
下面是另一个VHDL示例,用于在分配信号时混合数据类型:
signal test1: std_logic_vector(7 downto 0);
signal test2: 整数;
test2 <= test1;
-- Syntax Error: type of test2 is incompatile with type of test1 
上面的VHDL代码将引入语法错误 "test2的类型与test1的类型不兼容”。 你必须转换 test1 分配前为整数数据类型 test1 test2 如下:
library IEEE;
USE ieee.numeric_std.ALL;
signal test1: std_logic_vector(3 downto 0);
signal test2: 整数;
-- Use IEEE.NUMBERIC_STD.ALL Library for this conversion
test2 <= 至 _integer(unsigned(test1));
-- No syntax errors this time
另一方面,在分配时混合数据类型时,澳门在线没问题。以下是一个澳门在线示例:
  reg [3:0] test1;
  整数 test2;
  always @(test1) begin
   test2 = test1;
  end
         // NO syntax errors when compiling
当您使用以下命令分配信号时,澳门在线编译器不会像VHDL那样引入语法错误。 reg 数据类型转换为另一个具有不同数据类型的信号,例如 整数. 

  • 甚高密度脂蛋白复杂数据类型与澳门在线简单数据类型

如上所述,VHDL具有许多不同的复杂数据类型,用户还可以定义许多 其他复杂的数据类型。这也使VHDL比澳门在线更加冗长,因为澳门在线仅具有2种主要数据类型,并且澳门在线中不允许用户定义数据类型。
换句话说,要对同一电路建模,VHDL代码通常比澳门在线代码更冗长且冗长,这是因为由于其强类型,我们需要在VHDL中的不同复杂数据类型之间执行转换。这可能是优点或缺点。确实,当您在VHDL代码中分配错误时,VHDL编译器很可能会引入语法错误。成功编译VHDL代码后,与澳门在线相比,您的VHDL代码更有可能正常工作。另一方面,澳门在线的类型宽松,简洁明了;但是在成功编译之后,您的澳门在线代码中更有可能仍然存在错误。 
下面是使VHDL比澳门在线更为冗长的另一个示例代码:
-- 甚高密度脂蛋白 code for ALU 
process(SEL,ABUS,BBUS,tmp1,tmp2)
begin 
case(SEL) is
 when "0000" =>  ALUOUT <= tmp1; -- ADD
 when "0001" =>  ALUOUT <= tmp2;-- SUB 
 when "0010" =>  ALUOUT <= BBUS; -- AND
 when others => ALUOUT <= ABUS; 
 end case;
end process;
// 澳门在线 equivalent 至  甚高密度脂蛋白 ALU 
assign ALUOUT=(SEL==0)?tmp1:((SEL==1)?tmp2:((SEL==2)?BBUS:ABUS));
如上例所示,可以使用条件运算符(?)在澳门在线中将VHDL中的when / else with / select语句的情况(如果不是这样)进行详细说明。 

澳门在线和VHDL之间的其他区别:

  • 澳门在线就像 C语言,而VHDL就像 艾达 或Pascal编程语言

  • 澳门在线区分大小写,而VHDL不区分大小写。这意味着DAta1和Data1在澳门在线中是两个不同的信号,但是在VHDL中都是相同的信号。

  • 在澳门在线中,要在模块中使用组件实例,只需在模块中使用正确的端口映射实例化它即可。在VHDL中,实例化实例之前,如果使用旧的实例化语句作为示例,则通常需要在架构或程序包中声明组件。在VHDL-93中,您可以像这样直接实例化实体:Label_name:实体work.component_name端口映射(端口列表);“。

例如,要实例化VHDL中的实体clk_div,将在架构代码中添加一个组件声明,如下所示:
architecture Behavioral of digital_clock is
-- component declaration before instantiation below
component clk_div
port (
 clk_50: in std_logic;
 clk_1s : out std_logic
 );
end component;
signal clk, clk_1s: std_logic;
begin
-- component instantiation
create_1s_clock: clk_div port map (clk_50 => clk, clk_1s => clk_1s); 
end
或在包中声明组件以供重用:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
package clock_div_pack is 
component clk_div is
 port (
         clk_50: in std_logic;
         clk_1s : out std_logic
 );
end component clk_div;
end package;
-- Declare the component in a separate package 和 
-- reuse by using the following statement:
use work.clock_div_pack.all;
entity clock is
end clock;
architecture Behavioral of clock is
signal clk, clk_1s: std_logic;
begin
create_1s_clock: clk_div port map (clk_50 => clk, clk_1s => clk_1s); 
end

在VHDL-93中直接实例化实体的示例代码: 

create_1s_clock: entity work.clk_div port map (clk_50 => clk, clk_1s => clk_1s);

  • 澳门在线具有编译器指令,例如 时间尺度 (声明时间单位和延迟的精度), `定义 (将文本字符串声明为宏名称), `ifdef,ifndef`else`elseif`endif (条件编译), `包括 (包括可以包含函数或其他声明的文件)等。VHDL没有编译器指令。 

  • 甚高密度脂蛋白支持枚举和记录数据类型,允许用户为一种数据类型定义多个信号。 澳门在线不支持枚举和记录类型。以下是用于枚举和记录类型的VHDL代码:

type FSM is (IDLE, TEST, VERILOGvsVHDL, STOP, FPGA4student);
-- enumerated type
type int_4 is range 0  15;
-- record tye in 甚高密度脂蛋白
type record_example is record
 data1: 整数;
 data2: int_4;
 data3: FSM;
end record;
  • 等等。
尽管澳门在线和VHDL之间存在差异,但它们是两种最受欢迎​​的硬件描述语言。如果可以的话,最好同时学习它们。 重要的是要记住,在编码时始终考虑逻辑门或硬件,以开发硬件编码思路,而在使用澳门在线和VHDL编码时忘记软件编程思路。 
您可能会这样:
FPGA4student上的澳门在线项目
在FPGA4student上的VHDL项目
FPGA4student上的FPGA项目
什么是FPGA?它是如何工作的?
什么是FPGA编程? FPGA与软件编程
面向学生的推荐且价格合理的Xilinx FPGA板
面向学生的推荐且价格合理的Altera FPGA板

使用澳门在线在FPGA上进行图像处理
澳门在线中的微控制器设计
FPGA 澳门在线 甚高密度脂蛋白课程

没意见:

发表评论

热门FPGA项目