【VHDL】优先和非优先语句

少女dtysky

世界Skill

时刻2014.05.12

在VHDL中有四种条件语句,它们非别用在进程内和进程外,分为优先和非优先两大类。


使用

进程内的条件语句分为if-elsif-elsecase-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语句每个分支同样只能给一个信号赋值,有优先级。
与进程内区别相似,不再细说。

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。