大概改了一下,没有编译。
你定义了GENERIC 值,在程序的其他地方就要用这个值, 而不能用N
另外在PORT MAP 里,你定义是 0 TO N, 而在程序里又用N DOWNTO 0
写程序的时候最好保持一致性
你定义了信号CIIN, 用来和CIN合并,但你没有给它赋值。我把它改成了CONSTANT, 赋值0
LIBRARY IEEE;
USE IEEESTD_LOGIC_1164ALL;
USE IEEESTD_LOGIC_UNSIGNEDALL;
USE IEEESTD_LOGIC_ARITHALL;
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;
74LS42的功能是:十进制译码器;74LS283的功能是:四位二进制超前进位全加器。
译码器(decoder)是一类多输入多输出组合逻辑电路器件,其可以分为:变量译码和显示译码两类。 变量译码器一般是一种较少输入变为较多输出的器件,常见的有n线-2^n线译码和8421BCD码译码两类;显示译码器用来将二进制数转换成对应的七段码,一般其可分为驱动LED和驱动LCD两类。
全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。
扩展资料:
译码器的编码分类
1、字符编码(Character encoding)是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。
2、文字编码(Text encoding)使用一种标记语言来标记一篇文字的结构和其他特征,以方便计算机进行处理。
3、语义编码(Semantics encoding),以正式语言乙对正式语言甲进行语义编码,即是使用语言乙表达语言甲所有的词汇(如程序或说明)的一种方法。
4、电子编码(Electronic encoding)是将一个信号转换成为一个代码,这种代码是被优化过的以利于传输或存储。转换工作通常由一个编解码器完成。
5、神经编码(Neural encoding)是指信息在神经元中被如何描绘的方法。
6、记忆编码(Memory encoding)是把感觉转换成记忆的过程。
7、加密(Encryption)是为了保密而对信息进行转换的过程。
8、译码(Transcoding)是将编码从一种格式转换到另一种格式的过程。
参考资料:
参考资料:
写个vt程序:
`timescale 1ps/1ps
module sim();
reg a,b,c_in;
wire sum,c_out;
initial
begin
a <= 0;
b <= 0;
c_in <= 0;
end
always #10 a <= ~a;
always #15 b <= ~b;
always #25 c_in <= ~c_in;
fulladd U (sum,c_out,a,b,c_in);
endmodule
ps:你的程序有误,c未定义,我是这样写的 assign {c_out,sum} = a + b + c_in;
ENTITY adder IS
PORT(a,b,c: IN bit;
s,c0: OUT bit);
END adder;
ARCHITECTURE one OF adder IS
SIGNAL y_n:bit_vector(7 DOWNTO 0);
BEGIN
decoder:PROCESS(a,b,c)
VARIABLE y:bit_vector(7 DOWNTO 0);
BEGIN
y := (OTHERS => '1');
CASE c&b&a IS
WHEN "000" => y(0) := '0';
WHEN "001" => y(1) := '0';
WHEN "010" => y(2) := '0';
WHEN "011" => y(3) := '0';
WHEN "100" => y(4) := '0';
WHEN "101" => y(5) := '0';
WHEN "110" => y(6) := '0';
WHEN "111" => y(7) := '0';
END CASE;
y_n <= y;
END PROCESS;
s <= NOT(y_n(1) AND y_n(2) AND y_n(4) AND y_n(7));
c0 <= NOT(y_n(3) AND y_n(5) AND y_n(6) AND y_n(7));
END one;
以上就是关于我初学VHDL语言,请帮忙看看看我这个程序,这是一个通用全加器,程序可以这样写吗里面的N该怎么定义全部的内容,包括:我初学VHDL语言,请帮忙看看看我这个程序,这是一个通用全加器,程序可以这样写吗里面的N该怎么定义、74LS42、74LS283功能是什么、刚学习verilog,用modulesim软件,写一个一位全加器程序,写完了怎么赋初值,然后看波形啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)