EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& [6 p4 `9 B( p
【Espier FPGA VHDL学习帖】第20帖 引入寄存器技巧 常见泽 首先需要复习几个知识点: 第一:Signal与variablel
; ~0 E }( x$ Z8 ^, D第二:wait语句 4 l" w- p, G- \9 j$ U
WAIT;-- 第一种语句格式(永远挂起)" i1 I. K9 a8 ~4 n
WAIT ON 信号表;-- 第二种语句格式 (信号发生变化将结束挂起)# Q, ^9 y2 y3 T4 ^* K
WAIT UNTIL 条件表达式;-- 第三种语句格式(条件表达式中的信号发生变化切满足条件是结束挂起)
& I* U6 ]- M8 M2 g2 FWAIT FOR 时间表达式;-- 第四种语句格式, 超时等待语句(时间到结束挂起) 第三:操作符 VHDL有四类操作符:逻辑操作符、关系操作符、算术操作符、符号操作符 逻辑操作符 and or nor nand xor xnor not 如果在一个表达式中有两个以上算符,需要使用括号将这些运算分组,如果这一串运算符相同,且是AND\XOR\OR中的一种,则不需要使用括号。 其次: 高效的可综合电路的设计要求是:在么有必要时应尽量避免在电路中插入寄存器,否则既影响电路的工作速度,又占用不必要的硬件资源。 寄存器的引入通过使用WAIT和IF语句测试敏感信号边沿来实现的。 注意 (1) 一个进程中只能引入一种类型的寄存器,分为锁存器、有异步置位或复位的锁存器、触发器、有异步复位或同步置位的触发器。 (2) 引入寄存器的优选语句应该是IF语句,因为IF语句更容易控制寄存器的引入。 (3) 不要将用于产生寄存器的赋值语句放在IF(边沿)语句的ELSE条件的分支上,但可以放在ELSIF语句上。 (4) 在IF THEN或IF_THEN_ELSE语句中,只能存在一个边沿测试描述分句。也就是说一个进程综合得到的电路只能受控于一个时钟信号,并且一个同步逻辑模块(包括异步进程) 实例: and_b<= count(2) and count(1)and count(0); or_b <=count(2) or count(1)or count(0); nor_b <=count(2) xor count(1)xor count(0); 为了避免引入过多的寄存器,可将这3个输出赋值语句放在另一个没有WAIT或IF语句的进程中。 硬件描述语言: BEGIN Process --variablecount:std_logic_vector(2 downto 0); begin wait untilclock'event and clock='1'; if(rst='1')then --count:="000"; count<="000"; else --count:=count+1; count<=count+1; end if; --and_b <=count(2) and count(1)and count(0); --or_b <=count(2) or count(1)or count(0); --nor_b <=count(2) xor count(1)xor count(0); end process; process(count) begin and_b <=count(2) and count(1)and count(0); or_b <=count(2) or count(1)or count(0); nor_b <=count(2) xor count(1)xor count(0); end process; END arch; 查看结果 and_b<= count(2) and count(1)and count(0); or_b <=count(2) or count(1)or count(0); nor_b <=count(2) xor count(1)xor count(0); 3个赋值语句放在WAIT语句的进程中。
$ ~0 I0 o& v) {; F优化前:
; ^/ c) @$ P( ~; a2 [! V: L: b
* {! v ~# _) Z5 f( m- E% C0 ?引入寄存器+组合电路: ; F- ?" P1 R* D) k6 U2 S
将这3个输出赋值语句放在另一个没有WAIT或IF语句的进程中。
Y, [' C6 ~( m& k0 C H可见:如果要描述一个组合电路与时序电路混合的系统,可以将描述时序的部分放在具有边沿检测条件的IF语句或者WAIT语句的进程中,而将描述组合电路的语句放在普通的进程中,这样可以有效地控制寄存器的引入。 (本帖内容摘于潘松老师的《VHDL使用教程》) ) Q" [/ s: a- n/ s
|