計組實驗一 8位可控的二進位制補碼加減法器

2021-08-18 08:29:18 字數 3171 閱讀 7055

實驗說明:

1.使用 quartusii 9.0 完成8位可控的二進位制補碼加減法器

2.使用 vhdl 語言編寫**

3.學會模組化程式設計處理

實驗步驟

一. 先實現一位全加器

library ieee;

use ieee.std_logic_1164.all;

entity fa is

port(a,b,ci : in

std_logic;

s,co : out

std_logic);

end fa;

architecture b_fa of fa is

begin

s<=a xor b xor ci;

co<=((a xor b) and ci) or (a and b);

end b_fa;

二. 使用剛設計的全加器設計
library ieee;

use ieee.std_logic_1164.all;

entity adder8 is

port(a,b : in

std_logic_vector(7

downto

0); ci,m : in

std_logic;

s : out

std_logic_vector(7

downto

0); co ,vf: out

std_logic);

end adder8;

architecture s_adder8 of adder8 is

component fa is

port(a,b,ci : in

std_logic;

s,co : out

std_logic);

endcomponent;

signal c: std_logic_vector(7

downto

1);begin

cm1 : fa port

map(a(0),b(0) xor m,ci,s(0),c(1));

cm2 : fa port

map(a(1),b(1) xor m,c(1),s(1),c(2));

cm3 : fa port

map(a(2),b(2) xor m,c(2),s(2),c(3));

cm4 : fa port

map(a(3),b(3) xor m,c(3),s(3),c(4));

cm5 : fa port

map(a(4),b(4) xor m,c(4),s(4),c(5));

cm6 : fa port

map(a(5),b(5) xor m,c(5),s(5),c(6));

cm7 : fa port

map(a(6),b(6) xor m,c(6),s(6),c(7));

cm8 : fa port

map(a(7),b(7) xor m,c(7),s(7),co);

vf<=c(6) xor c(7); -- vf 為溢位訊號

end s_adder8;

三.編譯 adder8.vhd 檔案

設定頂層檔案(頂層檔案為 adder8.vhd),選好實驗室對應的晶元(如 cyclone - ep1c12q240c8 ),設定好相應引腳,最後進行編譯,編譯完成後,連線實驗箱進行檢驗。

原理圖

實驗效果

四. 改進

實際上 ,通過原理圖來看,ci 與 m 訊號實際上是相同的訊號。所以,最終實現是

library ieee;

use ieee.std_logic_1164.all;

entity adder8 is

port(a,b : in

std_logic_vector(7

downto

0); m : in

std_logic;

s : out

std_logic_vector(7

downto

0); vf: out

std_logic);

end adder8;

architecture s_adder8 of adder8 is

component fa is

port(a,b,ci : in

std_logic;

s,co : out

std_logic);

endcomponent;

signal c: std_logic_vector(8

downto

1);begin

cm1 : fa port

map(a(0),b(0) xor m,m,s(0),c(1));

cm2 : fa port

map(a(1),b(1) xor m,c(1),s(1),c(2));

cm3 : fa port

map(a(2),b(2) xor m,c(2),s(2),c(3));

cm4 : fa port

map(a(3),b(3) xor m,c(3),s(3),c(4));

cm5 : fa port

map(a(4),b(4) xor m,c(4),s(4),c(5));

cm6 : fa port

map(a(5),b(5) xor m,c(5),s(5),c(6));

cm7 : fa port

map(a(6),b(6) xor m,c(6),s(6),c(7));

cm8 : fa port

map(a(7),b(7) xor m,c(7),s(7),c(8));

vf<=c(8) xor c(7);

end s_adder8;

去除了 ci 管腳分配

二進位制的位運算

按位與 兩位全為1,結果為1 特殊用途 1 清零,想要將乙個單位清零,只要與乙個各位都為零的數值相與,結果為零 2 去乙個數中的指定位 如 x 10101110,取x的低四位用x 0000 1111 0000 1110即可得到 方法 找到乙個數,對應x要取的位,該數的對應位為1,其餘位為0,用此數與...

二進位制數的組

為了了解位操作運算元,這是首先要了解如何表示整數的二進位制。考慮乙個正常的十進位制的數,如5623。我們直觀地理解這些數字的平均 5 1000 6 100 2 10 3 1 因為有10位十進位制數,由乙個因子10的每個數字增加價值。二進位制數的工作方式相同,除了因為只有2的二進位制數 0和1 由乙個...

Python的二進位制位運算

python 語言能夠對整數進行逐位操作,它支援的運算子及含義如下所示 按位與 按位或 按位異或 取反 左移 右移 對於整型資料,各種位操作是對該資料的補碼進行的 正數的補碼與原碼相同,下面舉例皆以正數為例 對於長整型資料,由於其位寬不定,所以進行位運算時,認為其補碼的符號位向外無限擴充套件。下面對...