vhdl 赋值语句

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity number is
port(
clk : in std_logic;
ledag : out std_logic_vector(6 downto 0);
del : in std_logic_vector(2 downto 0)
);
end number;

architecture behavior of number is
begin
process(clk)
variable dount : std_logic_vector(2 downto 0);
begin
if clk'event and clk='1' then
dount:=dount+1;
end if;
del<=dount;
end process;
process(del)
begin
case del is
when "000"=>ledag<="0111111";-------0
when "001"=>ledag<="1101111";-------9
when "010"=>ledag<="0111111";-------0
when "011"=>ledag<="1011011";-------2
when "100"=>ledag<="0111111";-------0
when "101"=>ledag<="0000110";-------1
when "110"=>ledag<="1001111";-------3
when "111"=>ledag<="1011011";-------2
end case;
end process;
end behavior;
有两个错误 怎么解决他们 急~~~ 谢谢

第1个回答  2015-07-24
vhdl 赋值语句
这句的错误的原因是因为:你的又式是一个等式,而等式的结果得到的是一个布尔类型的值,而不是你所认为的逻辑值。布尔类型只有真、假两种结果;逻辑是‘0’、‘1’的二进制值;二者是有差别的,所以不能拿来赋值;

是二进制的意思了。因为前一阵接触到过X"fc",是指16进制的。
b指的是binary
我觉得也可以不加的,我还是VHDL初学者,也许是标准的问题。要好好看书哦
第2个回答  2011-07-15
1, del<=dount; del 是输入信号, 不能赋值
2, case ...
when ....
when others => ledag<="1111111";------- 加上这个,其实没啥用,但语法要求
end case;

说说你用dount做啥用,然后好改本回答被提问者采纳

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

VHDL中怎么区分条件信号赋值语句和选择信号赋值语句?
其实所谓“条件信号赋值语句”,不过是if语句与信号赋值语句的结合而已。一个并行的条件信号赋值语句是可以用一个进程来代替的:这个进程体是由if语句和信号赋值语句构成的。而所谓“选择信号赋值语句”,则是case语句与信号赋值语句的结合。一个并行的选择信号赋值语句也可以用一个进程来代替:这个进程体是由case语句和信...

vhdl语言中others=>'0'与others=>NULL的区别
others => '0' 用于对数组中的各个元素赋值‘0’;others => NULL 用于某些语句(例如case语句)中的子句(例如when子句)不做任何赋值。所以,others => '0' 是有赋值操作的,而others => NULL 是没有赋值操作的。

VHDl语言中:=什么意思,比如 tmpb:="1000",它和tmpb<=“1000”或者tmpb=...
:=是variable的赋值语句 <=是signal的赋值语句 =是用于判断的 例子:variable tmpb : std_logic_vector(3 downto 0);tmpb := "1000";--- signal tmpb : std_logic_vector(3 downto 0);tmpb <="1000";--- if(tmpb="1000") then output1<='1';else output1<='0';end if;...

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

vhdl 赋值语句中的判断
这句的错误的原因是因为:你的又式是一个等式,而等式的结果得到的是一个布尔类型的值,而不是你所认为的逻辑值。布尔类型只有真、假两种结果;逻辑是‘0’、‘1’的二进制值;二者是有差别的,所以不能拿来赋值;

在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"...

请教VHDL,这句话的含义: cnt <= (others => '0'); 谢谢了,在手册上没...
这个是给cnt赋零的意思,还可以这样用 比如说cnt是std_logic_vector(7 downto 0);那么cnt<=(1=>'1',others=>'0');就表示给cnt的第1位赋1,其他位的全部都赋0,结果cnt=“00000010”;希望这样说你可以懂得这种赋值语句的用法!!

请教VHDL,这句话的含义: cnt <= (others => '0'); 谢谢了,在手册上没...
那么cnt<=(1=>'1',others=>'0');就表示给cnt的第1位赋1,其他位的全部都赋0,结果cnt=“00000010”;希望这样说你可以懂得这种赋值语句的用法!! 本回答由提问者推荐 举报| 答案纠错 | 评论(5) 113 0 kshparadise 采纳率:45% 来自:芝麻团 擅长: 理工学科 烦恼 其他编程语言 求职就业 ...

vhdl语言里的cnt1:=(others=>'1')是什么意思
下面对他赋值:cnt1 <= (others => '0');表示的意思是cnt1(3) <= '0';cnt1(2) <= '0';cnt1(1) <= '0';cnt1(0) <= '0';也可以写成cnt1 <= "0000";用OTHERS写法的好处是,不需要介意位宽,如果使用下面的方法,这样如果修改位宽为5位后,“0000”要改成“00000”,而开始的写法则不用改。

相似回答