【VHDL】优先和非优先语句
世界Skill
在VHDL中有四种条件语句,它们非别用在进程内和进程外,分为优先和非优先两大类。
使用
进程内的条件语句分为if-elsif-else和case-when两种。
1.if语句:
if型是入门者喜欢用的描述方式,它比较符合软件编程的形象,不强行指定所有选项,不强行设定默认值,所以使用不当可能会比较容易产生latch。
if语句的一个特点就是具有“优先级”,它首先判断第一个条件,如果第一个不合适将会判断第二个,这在综合后的电路中体现为用时间换取资源,比如我们综合以下代码:
if con=3 then
con:=0;
outs<="1000";
elsif con=2 then
con:=con+1;
outs<="0100";
elsif con=1 then
con:=con+1;
outs<="0010";
elsif con=0 then
con:=con+1;
outs<="0001";
end if;
得到结果如下:
这说明if语句综合得到的是一个级联结构。
2.case语句:
case型要求指定默认值,虽然也可以直接填写null跳过但不建议这样去做,否则同样会产生latch。
case语句没有优先级,所有判断并列发生,用资源换取时间,原则上在资源充分的时候,如无特殊要求建议使用,综合以下代码:
case con is
when 3 =>
con:=0;
outs<="1000";
when 2 =>
con:=con+1;
outs<="0100";
when 1 =>
con:=con+1;
outs<="0010";
when 0 =>
con:=con+1;
outs<="0001";
when others =>
outs<="0000";
end case;
得到结果如下:
这说明case语句得到的是一个多路选择器。
3.进程外
进程外的条件语句有with-select和<=-else两种类型。
select语句的每个分支只能够有一个赋值语句,并且只能给一个信号赋值,没有优先级。
<=-else语句每个分支同样只能给一个信号赋值,有优先级。
与进程内区别相似,不再细说。
点击查看评论