一、實(shí)驗(yàn)?zāi)康?/h2>
1.了解簡易模型機(jī)的內(nèi)部結(jié)構(gòu)和工作原理。
2.熟悉譯碼器、運(yùn)算器的工作原理。
3.分析模型機(jī)的功能,設(shè)計(jì)指令譯碼器。
4.分析模型機(jī)的功能,設(shè)計(jì) ALU。
二、實(shí)驗(yàn)內(nèi)容
用 VERILOG 語言設(shè)計(jì)指令譯碼器;
用 VERILOG 語言設(shè)計(jì)ALU。
三、實(shí)驗(yàn)過程
1、指令譯碼器
A)創(chuàng)建工程(選擇的芯片為 family=Cyclone II;name=EP2C5T144C8)
步驟:左上角file->New Project Wizard->選擇工程位置和工程名->選擇芯片 Cyclone II, availabledevice 中選擇 EP2C5T144C8->點(diǎn)擊 next->最后點(diǎn)擊 finish 完成創(chuàng)建工程
工程創(chuàng)建圖:

編寫源代碼
根據(jù)實(shí)驗(yàn)指導(dǎo)和要求實(shí)現(xiàn)的功能寫出對應(yīng)的 Verilog 代碼。
步驟:左上角 file->new->Verilog hdlfile->編寫代碼(模塊名需與工程名一致)->編譯成功后保存到工程文件中
module ins_decode (
input en,
input [7:0] ir,
output reg mova,
output reg movb,
output reg movc,
output reg add,
output reg sub,
output reg and1,
output reg not1,
output reg rsr,
output reg rsl,
output reg jmp,
output reg jz,
output reg jc,
output reg in1,
output reg out1,
output reg nop,
output reg halt
);
// parameter MOV = 4'b1100,ADD = 4'b1001,SUB = 4'b0110,AND = 4'b1011,NOT = 4'b0101,RSR = 4'b1010,JMP = 4'b0011,IN = 4'b0010,OUT = 4'b0100,NOP = 4'b0111,HALT = 4'b1000;
always @(*) begin
{mova,movb,movc,add,sub,and1,not1,rsr,rsl,jmp,jz,jc,in1,out1,nop,halt} = 0;
if (en) begin
case(ir[7:4])
4'b1100: begin
if (ir[3] & ir[2])
movb = 1'b1;
else if (ir[1] & ir[0])
movc = 1'b1;
else
mova = 1'b1;
end
4'b1001:
add = 1'b1;
4'b0110:
sub = 1'b1;
4'b1011:
and1 = 1'b1;
4'b0101:
not1 = 1'b1;
4'b1010: begin
if (ir[1] & ir[0])
rsl = 1'b1;
else
rsr = 1'b1;
end
4'b0011: begin
jc = ir[1];
jz = ir[0];
jmp = !ir[1] && !ir[0];
end
4'b0010:
in1 = 1'b1;
4'b0100:
out1 = 1'b1;
4'b0111:
nop = 1'b1;
4'b1000:
halt = 1'b1;
default:
;
endcase
end
end
endmodule
代碼圖:

編譯與調(diào)試(包含編譯調(diào)試過程中的錯誤﹑警告信息以及資源消耗)

RTL 視圖

視圖分析及結(jié)論:
分析:由視圖可得,視圖左邊為輸入,右邊為輸出。其中連接有一系列的元器件。比如比較器:當(dāng)輸入相等時輸出 1,不相等時輸出 0;還有大部分的 2-1 選擇器構(gòu)成,當(dāng)控制信號為 0 時,輸出第一位,控制信號為 1 時,輸出第二位。圖中輸入信號為 ir 和 en,輸出信號包括 add 等 16 種情況。各個輸出端口之間通過導(dǎo)線相連。
結(jié)論:一個功能的實(shí)現(xiàn)需要經(jīng)過多重門的處理后才能實(shí)現(xiàn),一個元件的內(nèi)部原理結(jié)構(gòu)圖十分復(fù)雜。
D)功能仿真模型

結(jié)果分析及結(jié)論:
分析:功能仿真是指不考慮器件延時和布線延時的理想情況下對源代碼進(jìn)行邏輯功能的驗(yàn)證。由仿真波形可得,對于輸入狀態(tài)的變化,輸出結(jié)果實(shí)時變化,沒有延遲,其結(jié)果與電路設(shè)計(jì)的真值表的結(jié)果相對應(yīng)。
當(dāng) en 為 0 時,不管 ir 為何值,16 個輸出全為 0當(dāng) en 為 1 時:
當(dāng) ir=11000000 時,mova 輸出為 1;當(dāng) ir=11001100 時,movb 輸出為 1;當(dāng) ir=11000011 時,movc 輸出為 1;當(dāng) ir=10010000 時,add 輸出為 1;當(dāng) ir=01100000 時,sub 輸出為 1;當(dāng) ir=10110000 時,and1 輸出為 1;當(dāng) ir=01010000 時,not1 輸出為 1;當(dāng) ir=10100000 時,rsr 輸出為 1;當(dāng) ir=10100011 時,rsl 輸出為 1;當(dāng) ir=00110000 時,jmp 輸出為 1;當(dāng) ir=00110001 時,jz 輸出為 1; 當(dāng) ir=00110010 時,jc 輸出為 1; 當(dāng) ir=00100000 時,in1 輸出為 1;當(dāng) ir=01000000 時,out1 輸出為 1;當(dāng) ir=01110000 時,nop 輸出為 1;當(dāng) ir=10000000 時,halt 輸出為 1;
結(jié)論:功能仿真操作簡單,能體現(xiàn)和驗(yàn)證實(shí)驗(yàn)的功能,但忽略延遲的影響會使結(jié)果與實(shí)際結(jié)
果有一定誤差。
E)時序仿真

結(jié)果分析及結(jié)論:
分析:時序仿真是指在布線后進(jìn)行,是最接近真實(shí)器件運(yùn)行的仿真,它與特定的器件有關(guān),又包含了器件和布線的延時信息。由波形可得,當(dāng)輸入狀態(tài)發(fā)生改變時,輸出結(jié)果并未同時改變,而是有一定延遲,同時由于輸入狀態(tài)的改變,導(dǎo)致電路出現(xiàn)“冒險”,導(dǎo)致輸出結(jié)果并未與預(yù)期結(jié)果相同。
結(jié)論:時序仿真可以用來驗(yàn)證程序在目標(biāo)器件中的時序關(guān)系。同時考慮了器件的延遲后,其輸出結(jié)果跟接近實(shí)際情況,但是考慮的情況過多,不容易操作,容易產(chǎn)生錯誤。時序仿真不僅反應(yīng)出輸出和輸入的邏輯關(guān)系,同時還計(jì)算了時間的延時信息,是與實(shí)際系統(tǒng)更接近的一種仿真結(jié)果。不過,要注意的是,這個時間延時是仿真軟件“估算”出來的。
時序分析
操作方法是:編譯后,在 compilation report 中選擇【timing analysis】-【summary】-
【tpd】


Timing Analyzer Summmary圖
Tpd 圖
結(jié)果分析及結(jié)論:
分析:由圖可得,Timing Analyzer Summmary 總結(jié)所有經(jīng)典定時分析的結(jié)果,并報告每個定時特性的最壞情況定時。比如從 ir[3]到 jmp的最壞定時情況的 tpd 為 11.720ns。下面的tpd 報告表則給出了源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)之間的 tpd 延遲時間,比如第二行中 ir[5]到 add 的 tpd 為 11.699ns。
結(jié)論:實(shí)際連接圖中個元器件連接之間是存在時間延遲的,而且不同的元器件之間的時間延遲也不相同。
2.算術(shù)單元ALU
A)創(chuàng)建工程(選擇的芯片為 Cyclone II;name= EP2C5T144C8)步驟同指令譯碼器

module alu(
input m,
input [3:0]s,
input [7:0]a,
input [7:0]b,
output reg cf,
output reg zf,
output reg [7:0]t
);
reg[8:0] temp;
always @(*) begin
zf=1'b0;
cf=1'b0;
temp=9'b000000000;
if(m==1'b1) begin
if(s[3:0]==4'b1001) begin
t=a+b;
temp=a+b;
if(temp[8]==1'b1)
cf=1;
else
cf=0;
if(t==8'b00000000)
zf=1;
else
zf=0;
end
else if(s[3:0]==4'b0110) begin
t=b-a;
temp=b-a;
if(temp[8]==1'b0)
cf=0;
else
cf=1;
if(t==8'b00000000)
zf=1;
else
zf=0;
end
else if(s[3:0]==4'b1011)
t=a&b;
else if(s[3:0]==4'b0101)
t=~b;
else if(s[3:0]==4'b0100||s[3:0]==4'b1010)
t=b;
else
t=8'bxxxxxxxx;
end
else if(m==1'b0&&s[3:0]==4'b1100)
t=a;
else
t=8'bxxxxxxxx;
end
endmodule
步驟同指令譯碼器

編譯與調(diào)試(包含編譯調(diào)試過程中的錯誤、警告信息以及資源消耗)
步驟同指令譯碼器
資源消耗:

RTL 視圖

結(jié)果分析及結(jié)論:
分析:由視圖可得,視圖左邊為輸入,右邊為輸出。其中連接有一系列的元器件。比如比較器:當(dāng)輸入相等時輸出 1,不相等時輸出 0;還有大部分的 2-1 選擇器構(gòu)成,當(dāng)控制信號為 0 時,輸出第一位,控制信號為 1 時,輸出第二位。圖中輸入信號為 m,s,a,b,輸出信號為 t,cf,zf。各個輸出端口之間通過導(dǎo)線相連。
結(jié)論:一個功能的實(shí)現(xiàn)需要經(jīng)過多重門的處理后才能實(shí)現(xiàn),一個元件的內(nèi)部原理結(jié)構(gòu)圖十分復(fù)雜。
D)功能仿真波形

功能仿真波形圖
結(jié)果分析及結(jié)論:
分析:功能仿真是指不考慮器件延時和布線延時的理想情況下對源代碼進(jìn)行邏輯功能的驗(yàn)證。由仿真波形可得,對于輸入狀態(tài)的變化,輸出結(jié)果實(shí)時變化,沒有延遲,其結(jié)果與電路設(shè)計(jì)的真值表的結(jié)果相對應(yīng)。
當(dāng)控制信號m 為 1,s 為1001 時,執(zhí)行 t=a+b當(dāng)控制信號 m 為1,s 為 0110 時,執(zhí)行 t=b-a當(dāng)控制信號 m 為1,s 為 1011 時,執(zhí)行 t=a&b當(dāng)控制信號 m 為 1,s 為 0101 時,執(zhí)行 t=~b當(dāng)控制信號 m 為1,s 為 1010 時,執(zhí)行 t=b 當(dāng)控制信號 m 為0,s 為 1100 時,執(zhí)行 t=a 有進(jìn)位和借位時 cf 為1,否則為 0;
和為 0 或差為 0 時 zf 為 1,否則為0;
結(jié)論:功能仿真操作簡單,能體現(xiàn)和驗(yàn)證實(shí)驗(yàn)的功能,但忽略延遲的影響會使結(jié)果與實(shí)際結(jié)果有一定誤差。
時序仿真波形

結(jié)果分析及結(jié)論:
分析:時序仿真是指在布線后進(jìn)行,是最接近真實(shí)器件運(yùn)行的仿真,它與特定的器件有關(guān),又包含了器件和布線的延時信息。由波形可得,當(dāng)輸入狀態(tài)發(fā)生改變時,輸出結(jié)果并未同時改變,而是有一定延遲,同時由于輸入狀態(tài)的改變,導(dǎo)致電路出現(xiàn)“冒險”,導(dǎo)致輸出結(jié)果并未與預(yù)期結(jié)果相同。
結(jié)論:時序仿真可以用來驗(yàn)證程序在目標(biāo)器件中的時序關(guān)系。同時考慮了器件的延遲后,其輸出結(jié)果跟接近實(shí)際情況,但是考慮的情況過多,不容易操作,容易產(chǎn)生錯誤。時序仿真不僅反應(yīng)出輸出和輸入的邏輯關(guān)系,同時還計(jì)算了時間的延時信息,是與實(shí)際系統(tǒng)更接近的一種仿真結(jié)果。不過,要注意的是,這個時間延時是仿真軟件“估算”出來的。
G)時序分析


結(jié)果分析及結(jié)論:
分析:由圖可得,Timing Analyzer Summmary 總結(jié)所有經(jīng)典定時分析的結(jié)果,并報告每個定時特性的最壞情況定時。比如從 a[0]到 zf 的最壞定時情況的 tpd 為 38.50ns。下面的 tpd報告表則給出了源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)之間的 tpd 延遲時間,比如第二行中 s[0]到 t[0]的 tpd為 29.6ns。
結(jié)論:實(shí)際連接圖中個元器件連接之間是存在時間延遲的,而且不同的元器件之間的時間延遲也不相同。
四、思考題
指令譯碼器必須要 16 個輸出嗎?可否將一些輸出合并,哪些可以合并,為什么?
答:不一定。jmp 和 add 可以合并起來,因?yàn)?jmp 是將 add 后的結(jié)果寫入pc 中,則可以進(jìn)行 add 操作后直接進(jìn)行寫入操作。Add 和 sub 和 and 操作可以合并,因?yàn)檫@三個操作類似,且輸出為使能信號,故可以用一個合并使能信號來作為三個輸出的共同使能信號。
ALU 中的 S[3..0]控制信號是來自哪里或者說與什么信息相同?答:來自指令碼 ir的前四位。
3、為何 S[3..0]等于 1100 時將輸入 a 傳給t,S[3..0]等于 1010 或 0100 時將輸入b 傳給t? S[3..0]為控制信號,當(dāng) S[3..0]輸入為 1100 時,控制輸出 t 等于a,S[3..0]等于 1010 或0100 時,t 等于 b,此時 alu 相當(dāng)于選擇器。
五、實(shí)驗(yàn)總結(jié)、必得體會及建議
1、從需要掌握的理論、遇到的困難、解決的辦法以及經(jīng)驗(yàn)教訓(xùn)等方面進(jìn)行總結(jié)。
基本了解了簡易模型機(jī)的內(nèi)部結(jié)構(gòu)和工作原理。同時熟悉了譯碼器、ALU 的工作原理。學(xué)會使用 Verilog 語言編寫電路。但遇到了一些困難,比如不懂使用 QuartusII 進(jìn)行波形仿真。但通過上網(wǎng)查詢相關(guān)資料和詢問同學(xué)后得以解決問題,并通過分析報告發(fā)現(xiàn)電路中的問題。還有不懂根據(jù)實(shí)驗(yàn)要求的功能表輸出相對應(yīng)的結(jié)果,不懂使用 always 和 assign 語句等,通過上網(wǎng)查詢資料等都得以解決。以后再遇到相關(guān)問題時,可以通過先上網(wǎng)查詢資料,再詢問老師和同學(xué)來解決。
2、對本實(shí)驗(yàn)內(nèi)容、過程和方法的改進(jìn)建議(可選項(xiàng))。文章來源:http://www.zghlxwxcb.cn/news/detail-751751.html
希望在元件的功能表中能給出當(dāng)輸入除了已給出的輸出情況外的輸入,輸出結(jié)果應(yīng)該取什么。文章來源地址http://www.zghlxwxcb.cn/news/detail-751751.html
到了這里,關(guān)于HNU電路電子學(xué)實(shí)驗(yàn)二的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!