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

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

大概改了一下,没有编译。

你定义了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软件,写一个一位全加器程序,写完了怎么赋初值,然后看波形啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10089654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存