赞
踩
HDL:Hardware Description Language,硬件描述语言。
HDL语言具备以下硬件设计的基本概念:
互连(connectivity):wire型变量描述各个模块之间的端口与网线连接关系。
并发(concurrency):可以有效地描述并行的硬件系统。
时间(time):定义了绝对和相对的时间度量,可综合操作符具有物理延迟。
软件语言并无上述硬件对象。
通常,只有四个关键字能够被综合为电路:always、if-else、case、assign。
除此以外,其他关键字都不可以被综合为硬件电路,比如:function、for、fork、join。这些不可综合的关键字用于书写testbench。
通常会被逻辑综合映射为具有优先级的多路选择器。
每个if else语句就是一个2选1选择器。
设计方法:根据设计目标(面积和延迟)进行设计:先“加”后“选”,先“选”后“加”。
先加后选:控制通道延时较小。
数据通道延时:一个加法器和一个选择器。
控制通道延时:一个选择器。
电路面积:两个加法器+一个选择器。
先选后加:减少了一个加法器,减小了硬件的面积(加法器结构复杂,使用晶体管较多)。
数据通道延时:一个加法器和一个选择器。
控制通道延时:一个选择器和一个加法器。
电路面积:两个选择器+一个加法器
第一级选择信号具有最高的优先级。在设计中尽量使用单if语句(if…else if…else…)描述多条件判断结构,更简单,不易出错。
module Mux( input [2:0] sel, input a,b,c, output reg f ); always@(*)begin if(sel[0]) f = a; else if(sel[1]) f = b; else if(sel[2]) f = c; else f = 0;//所有条件不符时f=0,不生成锁存器 end endmodule
最后一级选择信号具有最高优先级。
module Mux(
input [2:0] sel,
output reg f
);
reg a,b,c;
always@(*)begin
f = 0;//所有条件不符时f=0,不生成锁存器
if(sel[0])
f = a;
if(sel[1])
f = b;
if(sel[2])
f = c;
end
endmodule
多if语句末尾不可加else,否则最后一个条件不满足时,无论其他的条件是否满足,结果会被else的结果覆盖。
若某些设计中,有些信号要求先到达(如关键便能信号、选择信号等),而有些信号需要后到达(如慢速信号、有效时间较长的信号等)。
设计方法:最高优先级给最迟到达的关键信号。
通常被映射为多路选择器,当条件互斥时是一种无优先级的判断结构。
与单if语句的区别是,case的条件一般互斥,但case的条件选项并不要求互斥。
//条件互斥的四选一数据选择器 module Selector( input [1:0] sel, input a,b,c,d, output reg f ); always@(*)begin case (sel) 2'b00: f = a; 2'b01: f = b; 2'b10: f = c; 2'b11: f = d; default: f = 0; endcase end endmodule
case语句的条件选项不要求互斥,虽然条件选项并发比较,但执行效果为谁在前且条件为真谁被执行,当条件不互斥时则存在优先级,效果如下。
//条件不互斥的数据选择器 module Selector( input [1:0] sel, input a,b,c,d, output reg f ); always@(*)begin case (sel) 2'b00: f = a; 2'b01: f = b; 2'b01: f = c;//条件不互斥,且条件不完备 2'b11: f = d; default: f = 0; endcase end endmodule
逻辑综合工具很难解释latch,因此,除非特殊用途,一般避免引入latch。
**锁存器(latch)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。