VHDL语言中信号赋值

out型不可以赋值给信号吗 比如
……q: OUT BIT;……SIGNAL tmp:BIT;……… tmp <= q;
这里为什么错了

其实所谓“条件信号赋值语句”,不过是if语句与信号赋值语句的结合而已。一个并行的条件信号赋值语句是可以用一个进程来代替的:这个进程体是由if语句和信号赋值语句构成的。
而所谓“选择信号赋值语句”,则是case语句与信号赋值语句的结合。一个并行的选择信号赋值语句也可以用一个进程来代替:这个进程体是由case语句和信号赋值语句构成的。
看一下下面的例子:
4选1多路选择器
ENTITY mux4 IS
PORT(in0,in1,in2,in3:IN Bit;
sel:IN Bit_Vector(0 TO 1);
q:OUT Bit);
END mux4;

ARCHITECTURE behav1 OF mux4 IS
BEGIN
mux4_p1:PROCESS(in0,in1,in2,in3,sel)
BEGIN
IF sel = ″00″ THEN q <= in0;
ELSIF sel = ″01″ THEN q <= in1;
ELSIF sel = ″10″ THEN q <= in2;
ELSE q <= in3;
END IF;
END PROCESS mux4_p1;
END behav1;

ARCHITECTURE behav2 OF mux4 IS
BEGIN
q <= in0 WHEN sel = ″00″ ELSE
in1 WHEN sel = ″01″ ELSE
in2 WHEN sel = ″10″ ELSE
in3; -- 这个条件信号赋值语句与进程mux4_p1等价
END behav2;

ARCHITECTURE behav3 OF mux4 IS
BEGIN
mux4_p2:PROCESS(in0,in1,in2,in3,sel)
BEGIN
CASE sel IS
WHEN ″00″ => q <= in0;
WHEN″01″ => q <= in1;
WHEN ″10″ => q <= in2;
WHEN OTHERS => q <= in3;
END CASE;
END PROCESS mux4_p2;
END behav3;

ARCHITECTURE behav4 OF mux4 IS
BEGIN
WITH sel SELECT
q <= in0 WHEN ″00″,
in1 WHEN ″01″,
in2 WHEN ″10″,
in3 WHEN OTHERS; -- 这个选择信号赋值语句与进程mux4_p2等价
END behav4;
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-16
VHDL语言中,规定“输出out”的变量不能做赋值运算,只能“被赋值”。你这里应该写成:q<=tmp; 变量tmp你可以给它一个初始值,如:signal tmp:bit:='1'; 希望都可以帮到你!

VHDL语言中信号赋值
而所谓“选择信号赋值语句”,则是case语句与信号赋值语句的结合。一个并行的选择信号赋值语句也可以用一个进程来代替:这个进程体是由case语句和信号赋值语句构成的。看一下下面的例子:4选1多路选择器 ENTITY mux4 IS PORT(in0,in1,in2,in3:IN Bit;sel:IN Bit_Vector(0 TO 1);q:OU...

VHDL中两个generate可以对同一个信号赋值吗
可以。可以利用时序的时差来对这信号赋值,比如说在上升沿对这一进程中信号赋值,在下降沿对另一进程中信号赋值,或者你把这个信号一分为二,在两进程中用不同的信号或变量来表示。vhdl是一种用于电路设计的高级语言。它出现在20世纪80年代的后期,最初是由美国国防部开发出来供美军用来提高设计的可靠性...

VHDL里 二维数组的赋值问题
先假设你的定义正确,那么你的信号w一定是w(x,y)类型的,那你调用的时候就不能只用一个参数x,(y呢?);其次,你的定义是相互矛盾的,本身就有问题。你想:端口b是一个标准逻辑位矢量的类型,把它赋给一个二维数组w(x,y)类型,本身就违反了同型赋值的规则,是不可能实现的;正确的做法应该...

vhdl语言如何使一个赋初值信号语句只用一次以后都不会重复执行_百度知 ...
1,在你的process进程语句内,加一句,使信号(例如:d0)的当前值赋值给d0。这个d0就会随着你信号的变换而变化了。2或者你定义一个状态么。令这个信号的初始状态为你想要的值就行了呗。例如。signal :state :d0:= xxx;

一个关于VHDL赋值语句执行顺序的问题
cnt是个信号而不是变量,所以“cnt<=cnt+1;”之后的if语句中所判断的cnt不是+1之后的值,而是+1之前的,是上一个仿真周期结束时的值。

VHDL中怎么对端口和信号赋值,赋值后马上起作用吗?
vhdl用<=来给信号或者是端口赋值,如果是信号是寄存器的话,需要等时钟来了,赋值才起作用,如果信号不是寄存器的话则可以马上起作用。

VHDL中是不是信号的初值由其他端口传递给它赋初值时用<=,而直接赋具 ...
不是你说的那样,信号赋值符号”<=”;变量赋值符号”:=”;申明信号的时候赋初值也能用:=

VHDL里when "0000"=> data<="10001001"; 是什么意思?
这条语句的意思是:当有‘0000’出现时,就将10001001"赋值给data。“<=”是信号的赋值符号。例如PROCESS( A )BEGIN CASE A IS WHEN "0000" => LED7S <= "0111111" ;WHEN "0001" => LED7S <= "0000110" ;WHEN "0010" => LED7S <= "1011011" ;WHEN "0011" => LED7S <=...

求vhdl里<=和:=的区别
<=是对信号进行赋值的赋值操作符,另外在关系运算中作为小于等于号使用;:=是对变量和常量进行赋值的赋值操作符,另外在声明信号、变量、常量的时候,可以用:=对其赋初值。

在vhdl语句中begin...end之间的赋值语句和if语句是并行的吗?_百度知 ...
是的,你的这个写法毫无疑问,所有语句都是并行的。而且,个人也很赞同这种写法。有一种情况,对同一个信号多次赋值,比如:a <= x"00";if cond1 = true then a<= x"01";elsif cond2 = true then a<= x"02";end if;看起来不太并行,其实相当于:if cond1 = true then a<= x"01"...

相似回答