VHDL 数据赋值

来源:百度知道 编辑:UC知道 时间:2024/05/16 01:20:34
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;

早说了,变量不要放在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