微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > VHDL同一进程中对变量多次赋值,在Verilog中如何表述

VHDL同一进程中对变量多次赋值,在Verilog中如何表述

时间:10-02 整理:3721RD 点击:
VHDL中在同一个process中对变量进行多次赋值,在verilog中怎么转过来进行表示,
     是在always中进行if...elseif...elseif....else...吗?还是别的方法表述,求高手指点 !

if、case、assign

不知道有没有VHDL2VERILOG的软件。


1、case语句感觉还行2、if语句有优先级,那这个优先级可以理解为按在同一个进程中对变量多次赋值的顺序,第一次赋值是最高优先级,第二次赋值是第二优先级,以此类推吗?
3、assign赋值,也是有优先级的,和我在2的表达一样的吗?
    感谢您的回答!



   都是有优先级的,case也有


那优先级的顺序,是和变量赋值的顺序一致吗?谢谢


转成verilog的if优先级和VHDL中多次赋值的变量中的顺序一致吗?比如下面的v.triggered中的两次赋值,就按这个上下顺序进行if..elseif...转换吗?谢谢您的回答!-- positive pulse trigger
if ctrlIn.trigger_cond = positivePulse then
if r.rtick = '1' then
v.pulsescan    := '1';

v.pulsewidth   := (others => '0');
end if;

if r.pulsescan = '1' and r.pulse = '1' then
v.pulsewidth := r.pulsewidth + 1;
end if;

if r.ftick = '1' then
v.pulsescan    := '0';

if (r.greatThanMin and r.lessThanMax) = '1' then
v.triggered      := '1';
end if;
end if;
end if;
-- negative pulse trigger
if ctrlIn.trigger_cond = negativePulse then
if r.ftick = '1' then
v.pulsescan    := '1';

v.pulsewidth   := (others => '0');
end if;

if r.pulsescan = '1' and r.pulse = '0' then
v.pulsewidth := r.pulsewidth + 1;
end if;

if r.rtick = '1' then
v.pulsescan    := '0';

if (r.greatThanMin and r.lessThanMax) = '1' then
v.triggered      := '1';
end if;
end if;

end if;


我看到你的v.triggered是在两个不同的if语句里面赋值的。在process里面的code是顺序执行的。



     在同一个process语句中code是顺序执行,我明白。我的v.triggered值确实是在两个不同的if语句中,我问的意思是:我在verilog中转换v.triggered变量时,将v.triggered在同一个always中赋值,并把v.triggered定义为reg信号,这个时候也要用if语句来赋值,那这个时候的优先级是按在VHDL中两个if语句的那个顺序吗?谢谢您的回答?



   一样的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top