EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
4 R* M' g) h& v/ K% Q8 T. }5 F
【Espier FPGA VHDL学习帖】第20帖 引入寄存器技巧 常见泽 首先需要复习几个知识点: 第一:Signal与variablel ' b8 B" w! Y1 D' ?4 Y
第二:wait语句
8 B# ` E) }8 o( HWAIT;-- 第一种语句格式(永远挂起)& y1 `. p! A$ u3 _5 E# N
WAIT ON 信号表;-- 第二种语句格式 (信号发生变化将结束挂起)7 F7 X% r X- v
WAIT UNTIL 条件表达式;-- 第三种语句格式(条件表达式中的信号发生变化切满足条件是结束挂起)
z; z) ~' _9 @4 B( a) u- @. tWAIT 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语句的进程中。
, C f6 R; |9 ~# J优化前:
1 P+ u! d+ W7 o9 e4 l) e# I% A/ S- l( h# {" V4 _. n5 a+ O
引入寄存器+组合电路:
" E) W0 I d6 g# j将这3个输出赋值语句放在另一个没有WAIT或IF语句的进程中。 " q: P* ?0 U! o: [
可见:如果要描述一个组合电路与时序电路混合的系统,可以将描述时序的部分放在具有边沿检测条件的IF语句或者WAIT语句的进程中,而将描述组合电路的语句放在普通的进程中,这样可以有效地控制寄存器的引入。 (本帖内容摘于潘松老师的《VHDL使用教程》) 8 y# b6 W: ?. {) X+ j2 d- w
|