精华内容
下载资源
问答
  • VHDL并行语句顺序语句的理解

    万次阅读 2018-03-08 10:08:49
    VHDL的并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。进程语句begin进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间是并行的,并可访问结构体或实体中定义的信号。...

    VHDL的并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。

    进程语句

    begin
    进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间是并行的,并可访问结构体或实体中定义的信号。因此进程语句称为并行描述语句。

    进行语句结构内部所有语句都是顺序执行的
    进程语句的启动是由process后敏感信号表中所标明的敏感信号触发来的。
    各进程间的通信是由信号来传递的
    语法如下:
    标记:

    process(敏感信号表)
                              变量说明语句;
    begin 
                               一组顺序语句;
    end process 标记;

    标记:为进程标号
    敏感信号表:是进程用来读取所有敏感信号(包括端口)的列表。
    变量说明:主要包括变量的数据类型说明、子程序说明等
    从begin到end process之间是一组顺序执行语句。

    敏感信号表
    所 谓敏感信号表:就是用来存放敏感信号的列表。在进程语句中,敏感信号指那些发生改变后能引起进程语句执行的信号。敏感信号表中可以使用一个或多个信号,当 其中一个或多个信号值改变时,就在进程内部引起语句执行。敏感信号表也可忽略,但程序中必须有其他形式的敏感信号激励。例如wait、wait for、wait until和wait on。

    进程语句的启动
    在VHDL语言中,进程有两种工作状态:等待和执行。当敏感信号表中的信号没有变化时,进程处于等待状态;当敏感信号表中的信号有变化时,进程处于执行状态
    进程语句的同步
    同一个结构体中不仅可以有多个进程存在,同一个结构体中的多个进程还可以同步。VHDL中通常采用时钟信号来同步进程,具体方法是:结构体中的几个进程共用同一个时钟信号来进行激励。

    并发信号赋值语句
    信号赋值语句在进程内部出现时,它是一种顺序描述语句。

    信号赋值语句在结构体的进程之外出现时,它将以一种并发语句的形式出现。它们在结构体中是并行执行的。

    注意:并发信号赋值语句是靠事件来驱动的,因此对于并发信号赋值语句来说,只有当赋值符号“<=”右边的对象有事件发生时才会执行该语句。

    条件信号赋值语句
    语法结构:
    目标信号<=表达式1 when 条件1 else
                         表达式2 when 条件2 else
                         表达式3 when 条件3 else
                          ...
                         表达式n-1 when 条件n-1 else
                         表达式n;
     
    VHDL 语言程序执行到该语句时,首先要进行条件判断,之后才进行信号赋值。如果满足条件,就将该条件前面那个表达式的值赋给目标信号;如果不满足条件按,就继续 判断,直到最后一个表达式,如果前面的条件均不满足就无条件的赋值给最后一个表达式,因为最后一个表达式赋值无需条件。

    选择信号赋值语句
    语法结构:
    with 表达式 select
              目标信号<=表达式1 when 选择条件1,
                                   表达式2 when 选择条件2,
                                    ...
                                    表达式n when 选择条件n;
     
    该语句在赋值之前需要对条件进行判断,附和条件则赋值,否则继续判断,直到最后一个语句。选择赋值语句需要把表达式的值在条件中都列举出来。

    元件例化语句
    在VHDL中,引用元件或者模块的说明采用component语句,他的作用是在结构体说明部分说明引用的元件或者模块,是元件说明语句。
    语法格式:
    component 引用的元件名
                     generic 参数说明;
                     port 端口说明;
    end componet;
    引用的元件名 :

    是将一个设计现成的实体定义为一个元件,是已经设计好的实体名,用来制定要在结构体中使用的元件名称
    如果结构体中要进行参数的传递,那么component语句中需要类属参数说明--可选项;
    引用元件端口的说明,是已经设计好的实体端口名表;
    元件说明语句在architecture和begin之间。

    元件例化引用
    采用componet语句对要引用的原件进行说明后,为了引用的元件正确地嵌入到高一层的结构体描述中,就必须把被引用的元件端口信号于结构体中相应端口信号正确地连接起来,这就是元件例化语句要实现的功能。
    语法结构:
    标号名:元件名
                    generic map(参数映射)
                    prot map(端口映射);
     
    其中标号:是元件例化语句的惟一标识,结构体中的标号名应该是惟一的
    generic map语句:它的功能是实现对参数的赋值操作,从而可以灵活地改变引用元件的参数,为可选项
    prot map:它的功能是把引用元件的端口信号与实际连接的信号对应起来,从而进行元件的引用操作。
    VHDL中,为了实现引用元件的端口信号与结构体中的实际信号相连接,往往采用两种映射方法:
    1、位置映射方法:指port map语句中实际信号的书写顺序于componet语句中端口说明的信号书写语句顺序一致
    2、名称映射方法:指在port map中将引用的元件的端口信号名称赋值给结构体中要使用例化元件的各个信号
    (名称映射语句的书写要求不是十分严格,只要把映射的对应信号连接起来就可以,顺序可以颠倒)。

    生成语句 
    规则结构
    某些电路部分是由同类元件组成的阵列,这些同类元件叫规则结构,例如:随机RAM、只读ROM、移位寄存器等规则结构一般用生成语句来描述。
    生成语句有两种形式:for_generate和if_generate
    for_generate主要用来描述规则
    if_generate主要用来描述结构在其端部表现出的不规则性,例如边界条件的特殊性
    for_generate语句
    标号:for 循环变量 in 离散范围 generate
                      并行处理语句;
                end generate 标号;
     
    标号:用来作为for_generate语句的唯一标识符,可选项;
    循环变量:它的值在每次循环中都将发生变化;
    离散范围:用来指定循环变量的取值范围,循环变量的取值将从取值范围最左边的值开始并且递增到取值范围的最右边,实际上限定了循环次数
    for_generate与for_loop语句很类似,但二者有区别。for_loop语句的循环体中的处理语句是顺序的,而for_generate语句中处理的语句是并行处理的,具有并发性。

    if_generate语句
    标号:if 条件 generate
                并行处理语句;
    end generate 标号;
    if_generate语句是并行处理语句,其中不允许出现else子语句

     

     

    初学VHDL,对一些问题总是感到困惑。比如,同样的赋值语句,在什么场合是并行的,什么时候又是顺序的?信号与变量有什么区别,为什么在PROCESS 里,对信号赋值的结果要等到进程挂起才起作用,而变量赋值却立刻起作用?其实,从语句产生的电路这个角度,可以更深刻地理解这些问题,下面是我自己摸索的 一些理解方法,有不妥之处请大虾们指正!

    1、赋值语句。
        同样a <= b的赋值语句,会形成什么电路,起关键作用的是敏感信号。
        a) 如果a <= b是在进程之外,那么隐含的敏感信号就是b,那么,这个赋值语句就形成一条连线。
        b) 如果是在一个同步进程中,如if (rising_edge(CLK)) then a <= b,这时候,就会形成一个触发器,因为敏感信号是时钟边沿。
       c) 如果敏感信号是一个电平信号,那么会形成一个锁存器。如一个不完整的if条件:if (cond = '1') then a <= b;

    2、并行语句和顺序语句。
        从形成的电路的角度,并行语句最终会有两种形式:
        a) 并联或不相联的逻辑门或组合电路。因为是并联或不相联的,当然是同时执行,这个好理解。
        b) 由同一个时钟边沿驱动的D触发器,不论D触发器之间是并联、串联或者不相连的。为什么呢?因为触发器是在同一个时钟边沿同时翻转的,也就是同时执行,所以本质上就是并行。
        顺序语句只有一种情况,就是形成串联的逻辑门或组合电路。

    3、信号与变量有什么不同?为什么信号赋值要等到进程挂起生效,变量赋值却立刻生效?
        其实,了解了上一点并行语句和顺序语句所生成的电路,这个问题就好理解了。因为在同步进程里的并行语句,大多是形成b的情况,就是多个由同一时钟驱动的触 发 器。由于从触发器的输入到翻转、输出需要一定的延时,这个延时基本就是进程执行完毕的时间,所以,触发器翻转后的输出在同一个时钟边沿中是看不到的,因为 它还没翻转过来呢。这就是信号赋值要等到进程挂起才生效的原因。
        那为什么变量赋值却能立刻生效呢?这是因为,变量其实是为了帮助在同步进程中生成一些逻辑门或组合电路用的。看一看代码:var1 := not i1; var2 := var1 and i2 ; sig <= var2; 生成的RTL,就会看到,两个变量赋值语句其实生成了一个非门、一个与门。而且,输入信号i1和i2到var2这段是个组合电路,是不受时钟边沿控制的, 而到信号赋值语句sig <= var2,才形成一个D触发器。所以,这两个变量赋值语句生成了一个串联的非门和与门,那当然var2取到的是var1赋值后的值了。
        最后顺便提一下为什么变量必须只能在进程内可见,我猜可能是为了防止在同步进程中输出异步信号,造成混乱吧。因为如果变量是外部可见的,如上面的 var2,那么var2的值就可以异步输出到进程外了。所以限制变量只能进程内可见后,要输出变量的值就只能赋值给一个信号,在同步进程中,就是加了一个 触发器了。

    展开全文
  • VHDL的并行语句

    千次阅读 2021-05-28 12:06:30
    并行语句是硬件描述语言的一大特点,与像c语言不同的是,并行语句的执行是并行的,不会因为书写顺序的前后而产生执行时的先后。VHDL语言支持的并行语句主要有以下7种: 端口映射语句 信号赋值语句 when条件选择语句...

    并行语句是硬件描述语言的一大特点,与像c语言不同的是,并行语句的执行是并行的,不会因为书写顺序的前后而产生执行时的先后。VHDL语言支持的并行语句主要有以下7种:

    • 端口映射语句
    • 信号赋值语句
    • when条件选择语句
    • generate语句
    • 进程语句
    • 过程调用语句
    • 块语句

    并行语句在VHDL程序中的位置
    并行语句可以是结构体的begin与end之间的任何位置,举例如下:

    architecture <arch_name> of <entity_name> is
    
    	-- Declarations (optional)结构体声明部分
    
    begin
    
    	-- Process Statement (optional)
    
    	-- Concurrent Procedure Call (optional)
    
    	-- Concurrent Signal Assignment (optional)
    
    	-- Conditional Signal Assignment (optional)
    
    	-- Selected Signal Assignment (optional)
    
    	-- Component Instantiation Statement (optional)
    
    	-- Generate Statement (optional)
    并行语句;
    并行语句;
    。。。
    并行语句
    end <arch_name>;
    

    一、映射语句

    1、映射语句
    映射语句主要应用于模块的调用,在例化模块时用于传递类属性参数和端口连接。

    2、component格式
    声明被引用模块的接口信息,以便调用该模块时正确进行端口与类属性参数的连接。QuartusII声明格式如下:

    3、模块的例化
    在VHDL程序中用在结构体声明中声明的模块,模块例化一次产生一块硬件电路,例化两个就产生两块硬件电路。quartusII模块例化格式如下:

    architecture <arch_name> of <entity_name> is
    
    	-- Declarations (optional)
    
    begin
    
    	-- Process Statement (optional)
    
    	-- Concurrent Procedure Call (optional)
    
    	-- Concurrent Signal Assignment (optional)
    
    	-- Conditional Signal Assignment (optional)
    
    	-- Selected Signal Assignment (optional)
    
    	-- Component Instantiation Statement (optional)
    
    	-- Generate Statement (optional)
    
    end <arch_name>;
    

    二、赋值语句

    1、并行赋值语句
    并行赋值语句是最简单的并行语句,基本格式如下:
    信号<=表达式;
    并行赋值语句由4部分组成:左操作数、赋值操作符“<=”、表达式和“;”。左操作数不能是输入端口信号,表达式中不能含有输出端口信号。

    三、进程语句

    1、process语句
    进程本身是并行语句,多个process语句并行执行,但它却是由顺序语句组成的。它可以组成组合电路,也可以组合成时序电路。基本格式如下:
    [标号:]process(敏感信号列表)
    声明语句;
    begin
    顺序语句1;
    顺序语句2;
    顺序语句3;

    end process;

    其中标号是可选的,敏感信号列表至少需要一个敏感信号。敏感信号的变化决定进程受否执行,如果敏感信号列表没有信号,那么进程永远挂起不执行;如果进程敏感信号列表没有信号,则需要使用wait语句来代表敏感信号列表的功能。

    2、敏感信号列表
    如果进程是实现组合逻辑功能,则赋值操作符右边的信号就应该都列入敏感信号列表;
    如果进程是实现时序逻辑功能且没有一个异步信号,则需要把时钟信号列入敏感信号列表即可;
    如果进程实现时序逻辑功能但与异步信号,则需要把时钟信号与异步信号列入敏感信号列表。
    进程的声明语句可以为进程定义一些变量供进程内部使用,举例如下:

    process(clk)
    --进程内部声明变量的位置
    		variable temp:integer range 0 to 127:=0;
    begin
    	if clk'event and ckl='1' then
    			temp:=temp+1;\
    			dout<=temp;
    	end if;
    end process;
    

    四、条件选择语句

    条件选择作用是根据指定的条件表达式,根据多种可能性进行相应的赋值。条件选择语句有when/else与with/select/when两种形式。
    1、when/else 条件选择语句
    基本格式如下:
    信号<=表达式1 when 条件1 else
    表达式2 when 条件2 else

    表达式n when 条件n else
    表达式n+1;

    2、with/select/when条件选中语句
    with/select/when语句与when/select语句类似,根据分支条件选中相应的表达式对目标信号进行赋值,但也有不同,首先with/select/when语句的分支不能有重复,必须唯一。格式如下:
    信号<=表达式1 when 条件1 ,
    表达式2 when 条件2 ,

    表达式n when 条件n ,
    表达式n+1 when others;

    3、条件选择语句的替换
    条件选择语句是并行语句,但它却可以由顺序语句来替换。用进程中的if语句来替换when/else语句,用进程中的case语句来替换with/select/when语句。

    when/else语句如下:
    信号<=表达式1 when 条件1 else
    表达式2 when 条件2 else

    表达式n when 条件n else
    表达式n+1;

    if语句来替换
    process(条件项与表达式中的敏感信号)
    begin
    if 条件1 then
    信号<=表达式1;
    elsif 条件2 then
    信号<=表达式2;

    elsif 条件n then
    信号<=表达式n;
    else
    信号<=表达式n+1;
    end if;
    end process

    with/select/when基本格式如下;
    with 信号选择判断量select
    信号<=表达式1 when 条件1,
    表达式2 when 条件2,

    表达式n when 条件n,
    表达式n+1 when others;

    可由case语句来替换,替换如下:
    process(信号选择判断量、条件项与表达式的敏感信号表)
    begin
    case 信号选择判断量 is
    when 条件1 =>
    信号<=表达式1;
    when 条件1 =>
    信号<=表达式1;

    when others=>
    信号<=表达式n+1;
    end case;
    end process;

    五、generate生成语句

    1、for/generate生成语句
    for/generate语句在for的范围内执行generate操作,格式如下:
    标号:for循环变量in循环变量的范围generate
    声明语句;
    begin
    并行语句;
    end generate;

    2、if/generate生成语句
    if/generate生成语句是在if条件为真的情况下才执行generate操作,格式如下:
    标号:if判断条件generate
    声明语句;
    begin
    并行语句;
    end generate 标号;

    六、procedure语句

    过程procedure是VHDL两种子程序(过程与函数)之一,可当作并行语句使用,出现在结构体中。过程procedure语句由两部分组成:过程头与过程体,定义格式如下:
    procedure 过程名 参数表 is
    [说明部分]
    begin
    顺序语句
    end procedure 过程名

    参数表是过程的对外接口,可以是信号、变量与常量。说明部分可以为过程声明变量。begin到end procedure之间是过程功能的实现部分,用顺序语句来描述。调用过程子程序时,当参数表输入信号发生变化时即执行过程中的顺序语句。

    七、块语句

    块语句由两行或两行以上的并行语句组成的;一般这种并行语句有一定内在联系,可能是共同组成一个逻辑功能。块语句有两种基本形式:简单块语句和保护块语句。
    1、简单块语句
    基本格式如下:
    标号:block
    块说明语句;
    begin
    并行语句;
    end block标号;

    块说明语句可以是信号的声明、类属性的声明或是不需要任何的块说明语句。

    2、保护块语句
    格式如下:
    标号:block(保护表达式)
    块说明语句;
    begin
    并行语句;
    end block标号;

    保护块说明语句与简单块说明语句意义相同,保护表达式的意义在于如果保护表达式为真,则执行下面的块语句;如果为假,则不执行下面的块语句。

    八、程序包

    程序包是VHDL程序的共享部分,在程序包内定义的数据对象与子程序在引用该程序包的VHDL程序中是可见的,因此程序包是VHDL设计能够复用的一个具体表现。程序包可声明的数据对象与子程序如下:

    -类型的声明

    • 常量的声明
    • 文件的声明
    • 别名的声明
    • 元件的component声明
    • 函数的定义
    • 过程的定义

    程序的使用分为3个过程:程序包的声明、程序包体的定义及使用use语句对程序包的引用。
    程序包声明格式如下
    package 程序包名 is
    声明语句1;
    声明语句2;
    声明语句3;

    声明语句n;
    end 程序包名;

    程序包体的基本格式如下:
    package body 程序包名 is
    函数或过程的定义;
    end 程序包;

    展开全文
  • Verilog的并行语句

    2021-08-07 10:58:22
    文章目录并行语句verilog生成语句 并行语句 1. 连续赋值语句---assign语句 2. Verilog程序块语句---initial与always块 3. Verilog实例化语句----单独实例化与数组实例化 4. verilog生成语句 verilog生成语句 生成...

    并行语句

    主要包括

    1. 连续赋值语句—assign语句
    2. Verilog程序块语句—initial与always块
    3. Verilog实例化语句----单独实例化与数组实例化
    4. verilog生成语句
    5. verilog函数调用语句
    6. Verilog模块说明语句

    verilog生成语句

    生成语句的关键字为generate,按照形式分为循环生成和条件生成。
    (1)循环生成
    基本语法如下:

        genvar <var>;
        generate 
        	for(<var>=0 ; <var> < <limit> ; <var> = <var> + 1'b1)
        	begin:<label>
        		<statement>
        	end
        endgenerate
    

    注意:
    a、for语句中的变量必须用关键字genvar定义,genvar关键字可以写在generate
    语句外面,也可写在generate语句里面,只要先于for语句声明即可。
    b、必须给循环段起一个名字。即

      	input [3:0] a,b;
      	outpt[3:0] c,d;
      	generate
      	genvar i
      		for (i=0 ; i < 4; i = i + 1)
      		begin: genExample
    			myAnd instance(.a(a) , .b(b), .c(c));
    			assign d[i] = a[i];
    		end
    	endgenerate
    		结果为
    

    在这里插入图片描述

    (2)条件生成
    generate-if语句

     		generate 
     			if(<condition>) begin:<label_1>
     				<code>;
     			end else if(<cindition>)begin:<label_2>
     				<code>;
     			end else begin:<label_3>
     				<code>;
     			end
     		endgenerate
    

    注:
    a、必须为常量比较。
    b、if语句中,begin-end只有在有多条语句时才是必须的。
    c、每一条分支的名称是可选的。与循环语句不同。
    *生成打的电路一旦连通,要想更改必需重新编译——即生成的电路不是动态的没有
    用到多路选择器。如果需要动态选择,直接用assign写多路选择器。

    (3)generate-case语句

     generate
     	case(<constant_expession>)
     		<value>:begin:<label_1>
     			<code>;
     			end
     		<value>:begin:<label_2>
     			<code>;
     			end
     		......
     		default:begin:<label_n>
     			<code>
     			end
     		endcase
     	endgenerate
     	注:与generate-if相同
    

    Verilog函数调用语句

    函数的定义可以放在模块实现部分的声明部分,function语法定义如下:

     	function[<lower>:<upper>]<output_name>;
     		input <name>;
     		<other inputs>
     		<variable declaration>
     		begin
     			<statement>
     		end
     	endfunction
    

    注:
    a、<output_name>既是是输出的变量名也是函数调用名,位宽由function
    关键字后面的范围指定。
    b、中,只能够声明寄存器类型的变量
    c、函数体中语句只能使用阻塞赋值符号;
    d、函数调用的时候只能使用位置赋值,需要按照input的顺序罗列变量
    e、函数调用可以在并行语句中也可以在串行语句中。
    f、函数中可以调用别的函数;
    g、函数支持递归,不过一般用于仿真;
    h、函数不能调用任务,主要由于任务中可以有定时相关语句,而函数中不能有
    例1:

     		moudule tft(
     		input clk,a,b,c,
     		output reg d,e,g
     		 );
     		 function andFunc;
     		 	input a;
     		 	input b;
     		 begin
    			andFunc = a&b;
    		end
    		endfunction
    		
    		always@(posedge clk)begin
    			e <= andFunc(a,b);			//非阻塞赋值
    		end
    
    		always@(*)begin
    			d = andFunc(a,b);
    		end
    
    		assign g = andFunc(a,b);
    	endmodule
    
    展开全文
  • EDA笔记(6)--并行语句

    千次阅读 2020-04-29 17:28:19
    一.进程语句 1.进程(PROCESS)语句 ...一个结构体中可以有多个并行运行的进程结构,而每一个进程的内部结构却是由一系列顺序语句来构成的。 PROCESS结构中既可以有时序逻辑的描述,也可以有组合逻辑的描述,它们...

    目录

    一.进程语句

     

    1.进程(PROCESS)语句

    2.process语句格式

    3.process语句组成

    4.进程语句设计要点

    二.并行信号赋值语句

    1.简单信号赋值语句

    2.条件信号赋值语句

    3.选择信号赋值语句

    三.元件例化语句

    1.元件例化的作用

    2.元件例化种类

    3.元件例化的语句格式

    四.生成语句

    1.生成语句的作用

    2.生成语句格式

    3.生成语句的组成

    4.生成语句的使用


     

    一.进程语句

     

    1.进程(PROCESS)语句

     

    是最具VHDL语言特色的语句,因为它提供了一种用算法(顺序语句)描述硬件行为的方法。进程实际上是用顺序语句描述的一种进行过程,也就是说,进程用于描述顺序事件。
    一个结构体中可以有多个并行运行的进程结构,而每一个进程的内部结构却是由一系列顺序语句来构成的。
    PROCESS结构中既可以有时序逻辑的描述,也可以有组合逻辑的描述,它们都可以用顺序语句来表达。

    2.process语句格式

    当进程中定义的任一敏感信号发生更新时,由顺序语句定义的行为就要重复执行一次。但当遇到WAIT语句时,执行过程将被有条件地终止,即所谓的挂起。

     

    3.process语句组成

     

     

    4.进程语句设计要点

     

    (1)同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的
    (2)进程的激活必须由敏感信号表中定义的敏感信号的变化来启动,否则必须由一个显式的WAIT语句来激活。
    (3)结构体中多个进程之所以能并行运行,一个很重要的原因就是进程之间的通信是通过传递信号和共享变量值来实现的。
    (4)综合后对应于进程的硬件结构,对进程中的所有可读入信号都是敏感的,而在VHDL行为仿真中并非如此,除非将所有的读入信号列为敏感信号。

     

    二.并行信号赋值语句

     

    三种信号赋值语句的共同点:

    赋值目标必须都是信号,所有并行赋值语句在结构体内的执行是同时发生的。

    1.简单信号赋值语句

    2.条件信号赋值语句

    与IF语句的比较:

    在结构体中的条件信号赋值语句的功能与在进程中的IF语句相同。
    在执行条件信号赋值语句时,每一赋值条件是按书写的先后关系逐项测定的,一旦发现赋值条件为TRUE,就立即将表达式的值赋给赋值目标。

    3.选择信号赋值语句

    选择信号赋值语句与CASE语句的比较:

    (1)选择信号赋值语句本身不能在进程中应用,但其功能却与进程中的CASE语句的功能相似。
    CASE语句的执行依赖于进程中敏感信号的改变,而且要求CASE语句中各子句的条件不能有重叠,必须包容所有的条件。
    (2)与CASE语句相类似,选择赋值语句对于子句条件选择值的测试具有同期性。因此,选择赋值语句不允许有条件重叠的现象,也不允许存在条件涵盖不全情况。

    三.元件例化语句

    1.元件例化的作用

    元件例化,就是将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而构成一个新的更大的设计实体或电路系统。
    在这里,当前设计实体相当于一个较大的电路系统所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接受此芯片的一个插座

    2.元件例化种类

    1.已设计好的一个VHDL设计实体;
    2.来自FPGA元件库中的元件;
    3.别的硬件描述语言(如Verilog)设计实体;
    4.软的lP核;
    5.FPGA中的嵌入式硬lP核。

    3.元件例化的语句格式

    元件定义语句

    端口映射语句

    元件例化的端口映射

    在名字关联方式下例化元件的端口名和关联(连接)符号“=>”两者都是必须存在的,而例化元件端口名与连接实体端口名的对应式,在PORT MAP句中的位置可以是任意的。在位置关联方式下PORT MAP子句中只要按例化元件的端口定义顺序列出当前系统中的连接实体端口名就行了。

    四.生成语句

    1.生成语句的作用

    简化有规则设计结构的逻辑描述,可根据某些条件设定好某一元件或设计单位,利用生成语句复制一组完全相同的并行元件或设计单元电路结构。

    2.生成语句格式

    格式1:

    该语句的作用,就是根据循环变量的取值范围,复制并行语句所对应的硬件电路N次。

    循环变量是自动产生的,根据取值范围自动递增或递减。

    从软件运行的角度看,FOR语句格式中循环变量的递增方式具有顺序性,但最后生成的设计结构却是完全并行的,这就是为什么必须用并行语句来作为生成设计单元的缘故。

    格式2:

    该语句的作用,就是根据生成语句的条件是否成立,决定是否复制并行语句所对应的硬件电路。

    3.生成语句的组成

    1.生成方式:有FOR语句结构或IF语句结构,用于规定并行语句的复制方式。
    2.说明部分:对元件数据类型、子程序和数据对象作一些局部说明。
    3.并行语句:生成语句结构中的并行语句是用来“COPY”的基本单元,主要包括元件、进程语句、并行过程调用语句、并行信号赋值语句甚至生成语句等。
    4.标号:生成语句中的标号并不是必须的,但如果在嵌套生成语句结构中就是很重要的。

    4.生成语句的使用

    1.对于已知内部由多个规则模块构成的电路,可以用FOR_GENERATE语句来描述。
    2.对于内部结构不规则的电路,可根据电路的不规则部分形成的条件用IF_GENERATE语句来描述
    3.对于内部由多个规则模块构成而两端结构不规则的电路,可以用FOR_GENERATE语句来描述电路内部的规则部分,而根据电路两端的不规则部分形成的条件用IF_GENERATE语句来描述。

     

     

     

     

     

     

     

    展开全文
  • 并行语句的特点:2.结构体2.1 并行信号赋值语句2.2条件信号赋值语句2.3选择信号赋值语句3.元件例化语句4.生成语句5.参数传递映射语句及其使用方法参数传递说明的一般书写格式如下:6.参数传递映射语句及其使用方法...
  • 硬件描述语言VHDL——并行语句

    千次阅读 2019-04-07 22:37:16
    并行语句是是硬件描述语言的特殊之处,这也是硬件描述语言不可少的一部分。硬件电路例如:总线,它需要多个输入。这个时候,我们必须并发的给出总线上的数据。软件程序设计语言也有并发,但是在性能要求不是苛刻的...
  • VHDL的顺序语句

    千次阅读 2021-05-30 15:23:18
    上次我们了解了VHDL语言的并行语句,现在我们来学习VHDL的顺序语句顺序语句并行语句共同构成了VHDL的描述语言,是VHDL作为硬件描述语句的一个特点。顺序语句只在仿真时间上是相对并行语句而言的,实际硬件的...
  • 比如,同样的赋值语句,在什么场合是并行的,什么时候又是顺序的?信号与变量有什么区别,为什么在PROCESS 里,对信号赋值的结果要等到进程挂起才起作用,而变量赋值却立刻起作用?其实,从语句产生的电路这个角度,...
  • VHDL的并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。 进程语句 begin 进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间是并行的,并可访问结构体或实体中定义的...
  • 硬件描述语言VHDL——顺序语句

    千次阅读 2019-03-20 12:56:25
    VHDL语言的基本语句分为两大类,顺序语句和并行语句。这是由于硬件设计的特点所引起的。假设需要设计一个三输入的与门两输入的或门,将它们两个的结果作为输入给加法器,那么这就需要同时给5个信号。这是并行的,...
  • FPGA之道(28)VHDL的并行语句

    千次阅读 2020-02-13 00:04:16
    VHDL的并行语句 在VHDL的基本程序框架一节中,我们了解到,architecture语句部分里面的语句都是并行的。 那么到底VHDL里面有哪些并行语句可以供我们使用呢?请看如下描述: architecture <arch_name> of ...
  • architecture中如果没有process的时候是不是整个代码就是按顺序语句运行了?如 architecture rtl of process_test is begin c; end architecture rtl; 假如说结构体中有process的时候,整个代码就是按并行做了?...
  • (1)顺序块中的语句是一条接一条按顺序执行的,只有前面的语句执行完成之后才能执行后面的语句(除了带有内嵌延迟控制的非阻塞赋值语句)。 (2)如果语句包括延迟或事件控制,那么延迟总是相对于前面那条语句执行完成的...
  • 本文节选自《FPGA之道》,来一起学习下作者对于并行与串行的讲解。
  • Verilog中语句执行顺序的理解

    千次阅读 2020-03-16 23:06:42
    转载自这篇博文 verilog主要的模块之间都是并行执行的,例如各个always之间 如果你在一个always中要对a赋值,而在另一个always中要使用a的值,这时候就要注意了,两者并行的,...这里面的内容都是顺序执行的,比如...
  • initial语句中的并行执行串行执行

    千次阅读 2018-10-08 15:24:00
    2019独角兽企业重金招聘Python工程师标准>>> ...同样的代码,只不过一个是并行一个是串行执行,在vivado中仿真的波形如下: 转载于:https://my.oschina.net/u/2963604/blog/2231392
  • 比如,同样的赋值语句,在什么场合是并行的,什么时候又是顺序的?信号与变量有什么区别,为什么在PROCESS 里,对信号赋值的结果要等到进程挂起才起作用,而变量赋值却立刻起作用?其实,从语句产生的电路这个角度,...
  • 一、并行赋值语句 包括并发信号赋值、条件信号赋值、选择信号赋值。 1、并发信号赋值: q <= tmp3; tmp3类似于敏感信号,每当tmp3信号变化一次,就执行一次。 2、条件信号赋值 条件赋值语句的赋值具有优先级,第...
  • sql查询语句执行顺序详解

    千次阅读 2017-12-14 14:09:05
    sql查询语句的处理步骤如下: --查询组合字段 (5)select (5-2) distinct(5-3) top(top_specification>)(5-1)select_list> --连表 (1)from (1-J)left_table>join_type> join right_table> on on_predicate> (1-A)...
  • EDA笔记(5)--顺序语句

    千次阅读 2020-04-22 18:15:47
    1.赋值语句有两种,即信号赋值语句和变量赋值语句: (1)变量赋值目标:=赋值源; 其中冒号加等号(:=)作为一个整体,称之为变量赋值符号。 (2)信号赋值目标<=赋值源; 其中指向左边的双箭头(<=)作为一...
  • Verilog中顺序语句的理解

    万次阅读 2017-01-07 17:18:49
    顺序语句是执行完一句再执行下一句,如果有非阻塞就要按照并行处理,再说几个概念: 并行,顺序:verilog主要的模块之间都是并行执行的,例如各个always之间 如果你在一个always中要对a赋值,而在另一个always中要...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JREJDK的关系什么是跨平台性?原理是什么Java语言有哪些...JavaC++的区别Oracle JDK OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...
  • VHDL并行语句(Concurrent Statements)

    千次阅读 2017-02-23 12:46:05
    VHDL并行语句(Concurrent Statements)并行语句和其他并行语句同步执行。以为为并行语句: Concurrent statements are concurrent with respect to all other such statements. The following are concurrent ...
  • verilog中顺序和并行块浅…

    千次阅读 2014-08-19 16:27:33
    原文地址:verilog中顺序和并行块浅析作者:SUN_403  顺序块也叫过程块关键字为begin——end,用于将多条语句组成顺序块。顺序块具有以下特点: (1) 顺序块中语句是一条接一条按顺序执行的,只有前面的语句执行...
  • library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned....为什么说顺序语句我说是并行运行的呢,其实是顺序运行的,只是最后的完成赋值是并行同时的。 参考书籍《EDA技术实用教程》—潘松
  • 串行和并行区别,超详细!

    千次阅读 2021-02-05 22:28:27
    Stream中有两个函数parallel()sequential(),分别代表了并行和串行,串行比较好理解,就是在主线程上按顺序执行逻辑代码,那么并行呢?那么我们要来说说什么是并行和并发,以前我们的CPU是单核的,多个任务是通过...
  • 仿真的时候发现结果怎么都不对,最后互换了always... end 假设B初始值为0,上面的代码在上升沿来临时,会先给B赋值再给A赋值,A不会得到上升沿之前B的值0,而是得到上升沿之后B的值1,这就导致了两个语句顺序执行的。
  • 位数据类型BIT位矢量类型BIT_VECTOR 位数据类型BIT的取值范围是逻辑位‘1’‘0’。位矢量类型BIT_VECTOR是BIT的数组类型。 SIGNAL X,Y:BIT; SIGNAL A,B:BIT_VECTOR(3 DOWNTO 0); 标准逻辑位数据类型STD_...
  • 顺序和并行

    2017-03-19 17:35:00
    顺序和并行块,顾名思义,顺序块就是在这个块开始之后语句顺序一条一条执行,上一条执行完才能执行下一条,若上一条语句产生了死循环,那么下一条语句就不可能再执行,这个块就永远不会结束。而并行块就是这个块...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,394
精华内容 30,957
关键字:

并行语句和顺序语句的区别