我初学VHDL语言,请帮忙看看看我这个程序,这是一个通用全加器,程序可以这样写吗?里面的N该怎么定义?

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY THREE IS
GENERIC(DATAWIDTH:INTEGER:=N);
PORT (
A,B:IN STD_LOGIC_VECTOR(0 TO N);
CIN:IN STD_LOGIC;
SUM:OUT STD_LOGIC_VECTOR(0 TO N);
CO:OUT STD_LOGIC
);
END;
ARCHITECTURE XIA OF THREE IS
SIGNAL Y,AA,BB,CC:STD_LOGIC_VECTOR(N+1 DOWNTO 0);
SIGNAL CIIN:STD_LOGIC_VECTOR(N DOWNTO 0);
BEGIN
AA<='0'&A;
BB<='0'&B;
CC<=CIIN&CIN;
PROCESS(AA,BB,CC)
BEGIN
Y<=AA+BB+CC;
END PROCESS;
CO<=Y(N+1);
SUM<=Y(N DOWNTO 0);
END;
请大家帮帮忙看看,解决了加分啊!求各位大大!!!!

大概改了一下,没有编译。
你定义了GENERIC 值,在程序的其他地方就要用这个值, 而不能用N
另外在PORT MAP 里,你定义是 0 TO N, 而在程序里又用N DOWNTO 0
写程序的时候最好保持一致性
你定义了信号CIIN, 用来和CIN合并,但你没有给它赋值。我把它改成了CONSTANT, 赋值0

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY THREE IS
GENERIC(DATAWIDTH : INTEGER:=5); -- 或者其他整数
PORT (
A:IN STD_LOGIC_VECTOR(DATAWIDTH-1 DOWNTO 0);
B:IN STD_LOGIC_VECTOR(DATAWIDTH-1 DOWNTO 0);
CIN:IN STD_LOGIC;
SUM:OUT STD_LOGIC_VECTOR(DATAWIDTH-1 DOWNTO 0);
CO:OUT STD_LOGIC
);
END THREE;

ARCHITECTURE XIA OF THREE IS
SIGNAL Y,AA,BB,CC:UNSIGNED(DATAWIDTH DOWNTO 0);
CONSTANT CIIN :STD_LOGIC_VECTOR(DATAWIDTH-1 DOWNTO 0) := (OTHERS=>'0');

BEGIN
AA <= UNSIGNED('0'&A);
BB <= UNSIGNED('0'&B);
CC <= UNSIGNED(CIIN&CIN); -- 用usigned做加法
PROCESS(AA,BB,CC)
BEGIN
Y<=AA+BB+CC;
END PROCESS;

CO <=Y(Y'LEFT);
SUM <=STD_LOGIC_VECTOR(Y(Y'LEFT-1 DOWNTO 0));

END XIA;追问

编译通过啦!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-22
这个,楼主建议你发到电气自动化版块儿,比如DSP开发,FPGA封装之类的,应该比这里好些.....
相似回答