VHDL 数据赋值

TYPE CODE_ONE IS ARRAY (3 DOWNTO 0) OF STD_LOGIC;
TYPE CODE_TYPE IS ARRAY (15 DOWNTO 0) OF STD_LOGIC;
SIGNAL A:CODE_ONE;
SIGNAL B:CODE_TYPE;
如果想要把A的全部位数赋值给B的后四位。应该怎么实现这个功能呀?
如果用B(3 TO 0)<=A(3 TO 0);报错呀
随便给看看这个为什么报错呀

PROCESS(enter)
VARIABLE user_code:STD_LOGIC_VECTOR(15 DOWNTO 0);
VARIABLE admin_code:STD_LOGIC_VECTOR(15 DOWNTO 0);
VARIABLE t_code:STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
IF (user_adminIN='1') t_code:=admin_code;--此行报错,missing source
--书上不是说同位宽,同数据类型的矢量间能赋值的嘛
END IF;
END PROCESS;

第1个回答  2007-09-03
早说了,变量不要放在PROCESS里面,
开始定义的几个信号全放在ARCHITECTURE里,用SIGNAL

SIGNAL user_code:STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL admin_code:STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL t_code:STD_LOGIC_VECTOR(15 DOWNTO 0);
PROCESS(....)

t_code <= admin_code;

END PROCESS

VHDL是强类型语言!
不要写乱七八ZAO的语法.

在里面只能按照以下方式,下面是一个计数器的程序.
看到没有?开始一块写ENTITY.
然后ARCH.再定义SIGNAL,
下面写PROCESS和组合逻辑,
什么变量定义,不要出现在这里面,那是用在TESTBENCH上面的,这里不要定义.UNDERSTAND?
像SIGNAL在电路生成中,他可能是寄存器,可能是信号.但你定义个变量,生成电路那是什么?那不是个具体东西,只是个抽象化的概念,所以不能写的.
你现在写RTL就按照下面的格式做.

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

entity cnt16 is
port(
clk : in std_logic;
reset : in std_logic;
clear : in std_logic;
cnt_en : in std_logic;
cnt_out : out std_logic_vector(3 downto 0)
);
end cnt16;

architecture RTL of cnt16 is

signal cnt_out_reg : std_logic_vector(3 downto 0);

begin

process(clk, reset) begin
-- Asynchronous Reset
if (reset = '1') then
cnt_out_reg <= "0000";
-- Synchronous operation
elsif (clk'event and clk = '1') then
-- Synchronous clear
if (clear = '1') then
cnt_out_reg <= "0000";
-- Synchronous Enable
elsif (cnt_en = '1') then
cnt_out_reg <= cnt_out_reg + 1;
end if;
end if;
end process;

cnt_out <= cnt_out_reg;

end RTL;本回答被提问者和网友采纳

VHDL 数据赋值
SIGNAL user_code:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL admin_code:STD_LOGIC_VECTOR(15 DOWNTO 0);SIGNAL t_code:STD_LOGIC_VECTOR(15 DOWNTO 0);PROCESS(...)t_code <= admin_code;END PROCESS VHDL是强类型语言!不要写乱七八ZAO的语法.在里面只能按照以下方式,下面是一个计...

vhdl语言里的cnt1:=(others=>'1')是什么意思
CNT1可能是一个多位宽的数据,将其所有位都赋为1 定义了一个多位宽数据:singal cnt1: std_logic_vector(3 downto 0)下面对他赋值:cnt1 <= (others => '0');表示的意思是 cnt1(3) <= '0';cnt1(2) <= '0';cnt1(1) <= '0';cnt1(0) <= '0';也可以写成 cnt1 <= "0000...

vhdl语言有哪几种类操作符?
VHDL 提供了6种预定义的运算操作符:赋值运算符:赋值运算符用来给信号、变量和常数赋值。2.逻辑操作符:逻辑运算的操作数必须是BIT,STD_LOGIC或STD_ULOGIC类型的数据(或者是这些数据类型的扩展,即BIT_VECTOR,STD_LOGIC_VECTOR或STD_ULOGIC_VECTOR)。3.算术操作符:用来执行算术运算操作。操作数可以是...

vhdl语言数据对象有哪几种?作用范围如何?对其赋初值作用有何不同_百度...
2、变量 常用在实现某些算法的赋值语句当中,只是个局部变量,只能在进程和子程序中使用。(是一种理想化的数据传输,不存在任何的延时行为)3、信号 表示一条硬件连接线:如输入输出端口,描述硬件系统的基本数据对象。

VHDL的简单赋值问题
variable CQI:std_logic_vector(7 downto 0):=(others<='0');cqi(1downto 0)<="XX";(X为你要赋的值)

VHDL中什么是可综合的数据类型,可综合具体是什么意思?
1、就是最终可以用FPGA内部寄存器的逻辑来实现比如,加法、减法、乘法、赋值什么的都是可综合的,但是如,文件读写等仅能在仿真中使用,不可能烧写到FPGA中去。2、所谓综合,就是将设计向前推进的过程。而推进设计,就意味着将抽象化的描述转换成形象化的描述。3、如果是std_logic_unsigned包集合中的...

vhdl程序说明
elsif k=2 then k<=3;m(2)<='0'; m(0)<='1';---当k=2时,对m(2)、m(3)进行赋值 elsif k=4 then k<=5;m(3)<='0'; m(1)<='1'; aa(0)<=a;---当k=4时 对m(3),m(1)进行赋值,将a送入bb寄存器中的最低位 elsif k=6 then k<=7;m(2)<='1'; m(0)<...

34. 在一个VHDL设计中idata是一个信号,数据类型为integer,数据范围0...
首先应为idata是信号不能用:=赋值排除A和D,再看范围是0 to 127,B选项中16#A0#是160,C是112,所以C才是符合取值范围的正确赋值。a#x#Ey的意思就是a表示数制,x是值,y是对于a的指数

VHDL如何检测数据发生变化,类似rising_edge 这种
用==等号,先将当前的数值保存在寄存器中,然后在比较该寄存器的数值和输入的数值是否相等,来判断数据是否在变化 例如,输入信号为inputA,将inputA保存为regA,然后判断if(inputA==regA) then c<=1;elsec<=0;endif;若inputA发生了变化,则判断结果c为0,否则c为1 ...

VHDL编程中,CQI=(OTHERS=>'0');CQI数据类型为variable CQI: STD...
应该是指“0000“赋值将变量cqi。

相似回答