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