HDLBits答案(6)_硬件模块设计的思考方式
硬件模塊設(shè)計(jì)的思考方式
HDLBits鏈接
基本的邏輯門操作
題目描述1:將輸入端口in和輸出端口out連接。
Solution1:
module top_module (input in,output out);assign out = in; endmodule題目描述2:將輸出out接地。
Solution2:
module top_module (output out);assign out = 1'b0; endmodule題目描述3:實(shí)現(xiàn)或非門操作。
Solution3:
module top_module (input in1,input in2,output out);assign out =~(in1 | in2); endmodule題目描述4:實(shí)現(xiàn)下圖所示的邏輯操作。
Solution4:
module top_module (input in1,input in2,output out);assign out = in1 & (~in2); endmodule題目描述5:實(shí)現(xiàn)下圖所示的邏輯操作。
Solution5:
module top_module (input in1,input in2,input in3,output out);wire temp;assign temp = ~(in1^in2);assign out = temp ^ in3; endmodule題目描述6:嘗試同時(shí)建立幾個(gè)邏輯門,建立一個(gè)兩輸入的組合電路。
共7個(gè)輸出如下:
- out_and: a and b
- out_or: a or b
- out_xor: a xor b
- out_nand: a nand b
- out_nor: a nor b
- out_xnor: a xnor b
- out_anotb: a and-not b
Solution6:
module top_module( input a, b,output out_and,output out_or,output out_xor,output out_nand,output out_nor,output out_xnor,output out_anotb );assign out_and = a&b;assign out_or = a|b;assign out_xor = a^b;assign out_nand = ~(a&b);assign out_nor = ~(a|b);assign out_xnor = ~(a^b);assign out_anotb = a&(~b); endmodule題目描述7:
7400系列集成電路是一個(gè)數(shù)字芯片系列,每個(gè)都由幾個(gè)基本的邏輯門構(gòu)成。7420是一個(gè)帶有兩個(gè)4輸入與非門的芯片。
實(shí)現(xiàn)一個(gè)具有與7420芯片相同功能的模塊,共8個(gè)輸入和2個(gè)輸出。
Solution7:
module top_module ( input p1a, p1b, p1c, p1d,output p1y,input p2a, p2b, p2c, p2d,output p2y );assign p1y=~(p1a&p1b&p1c&p1d);assign p2y=~(p2a&p2b&p2c&p2d); endmodule真值表
在前面的練習(xí)中,我們使用簡(jiǎn)單的邏輯門和幾個(gè)邏輯門的組合,這些電路是組合電路的例子。
組合電路的意思是電路的輸出僅取決于輸入,這意味著對(duì)于任何給定的輸入值,只有一個(gè)可能的輸出值。因此,描述組合函數(shù)行為的一種方法是明確地列出所有可能的輸入所對(duì)應(yīng)的輸出值,即真值表。
對(duì)一個(gè)有N個(gè)輸入的布爾函數(shù)而言,有2N種可能的輸入組合。真值表的每一行都列出了一個(gè)輸入組合,因此總有2N行。output列顯示了每個(gè)輸入值對(duì)應(yīng)的輸出。
那么我們?nèi)绾沃挥脴?biāo)準(zhǔn)邏輯門來(lái)實(shí)現(xiàn)查找表的功能呢?
一種簡(jiǎn)單的方法是將真值表中所有的真值寫為乘積求和項(xiàng)的形式。求和即為或操作,乘積即為與操作。先使用一個(gè)N-輸入的與門來(lái)決定是否輸入的向量與真值表匹配,然后再用一個(gè)或門來(lái)選擇滿足匹配條件的結(jié)果進(jìn)行輸出。
題目描述:構(gòu)建一個(gè)模塊實(shí)現(xiàn)上述真值表的功能。
Solution:
module top_module( input x3,input x2,input x1, // three inputsoutput f // one output );assign f = ((~x3)&x2&(~x1))|((~x3)&x2&x1)|(x3&(~x2)&x1)|(x3&x2&x1); endmodule部分考題
題目描述1:
創(chuàng)建一個(gè)有兩個(gè)2位輸入A[1:0]和B[1:0]的電路,產(chǎn)生一個(gè)輸出z。若A=B,則z=1,否則z=0。
Solution1:
module top_module ( input [1:0] A, input [1:0] B, output z ); assign z=(A==B)?1'b1:1'b0; endmodule題目描述2:
構(gòu)建模塊實(shí)現(xiàn)函數(shù)z = (x^y) & x
Solution2:
module top_module (input x, input y, output z);assign z=(x^y)&x; endmodule題目描述3:
構(gòu)建模塊實(shí)現(xiàn)如下波形圖的輸入輸出關(guān)系
Solution3:
module top_module ( input x, input y, output z );assign z=~(x^y); endmodule題目描述4:
A模塊實(shí)現(xiàn)的功能如上述題二所示,B模塊實(shí)現(xiàn)的功能如題三所示。搭建模塊實(shí)現(xiàn)下圖所示功能:
Solution4:
module top_module (input x, input y, output z);wire za;wire zb;assign za = (x ^ y) & x;assign zb = ~(x ^ y);assign z = (za | zb) ^ (za & zb);endmodule硬件工程師的思考方式
[David說(shuō)]:當(dāng)進(jìn)行模塊設(shè)計(jì)時(shí),我們最好后向思考問(wèn)題,如何從輸出到輸入。這與我們平時(shí)順序式地思考編程問(wèn)題不同,在編程時(shí)我們一般首先看輸入如何決定輸出,即輸入為XX時(shí)輸出為XX;對(duì)硬件工程師而言,通常的思路為輸出為XX時(shí)輸入是XX?
在硬件設(shè)計(jì)中,在兩種思路間思考與切換是很重要的技能。
題目描述1:設(shè)計(jì)一種電路來(lái)控制手機(jī)的鈴聲和振動(dòng)馬達(dá)。當(dāng)有來(lái)電輸入信號(hào)時(shí)(input ring),電路必須打開(kāi)鈴聲(output ringer= 1)或電機(jī)(output motor= 1),但不能同時(shí)打開(kāi)。如果手機(jī)處于振動(dòng)模式(input vibrate_mode = 1),打開(kāi)電機(jī)。否則打開(kāi)鈴聲。
Solution1:
module top_module (input ring,input vibrate_mode,output ringer, // Make soundoutput motor // Vibrate );assign ringer = ring & (~vibrate_mode);assign motor = ring & vibrate_mode; endmodule題目描述2:加熱/冷卻恒溫器同時(shí)控制加熱器(冬季)和空調(diào)(夏季)。設(shè)計(jì)一個(gè)電路,根據(jù)需要打開(kāi)或關(guān)閉加熱器、空調(diào)和鼓風(fēng)機(jī)。
恒溫器有兩種模式:加熱模式(mode= 1)和冷卻模式(mode= 0)。在加熱模式下,當(dāng)溫度過(guò)低時(shí)打開(kāi)加熱器(too_cold = 1)但是不要使用空調(diào)。在冷卻模式下,當(dāng)溫度太高(too_hot= 1)時(shí)打開(kāi)空調(diào),但不要打開(kāi)加熱器。
當(dāng)暖氣或空調(diào)打開(kāi)時(shí)。同時(shí)打開(kāi)風(fēng)扇讓空氣流通。此外。用戶也可以僅要求風(fēng)扇打開(kāi)(fan_on = 1),即使加熱器和空調(diào)關(guān)閉。
Solution2:
module top_module (input too_cold,input too_hot,input mode,input fan_on,output heater,output aircon,output fan ); assign heater = mode & too_cold;assign aircon = (~mode) & too_hot;assign fan = (mode & too_cold) | ((~mode) & too_hot) | fan_on; endmodule對(duì)單向量的各bit進(jìn)行操作
[David說(shuō)]:想到assign實(shí)現(xiàn)就用assign,否則可以合理使用for循環(huán)減少代碼量。
題目描述1:為3位輸入向量構(gòu)造一個(gè)數(shù)1的計(jì)數(shù)電路。
Solution1:
module top_module( input [2:0] in,output [1:0] out );integer i;always @(*) beginout = 2'b0;for(i=0;i<3;i++) beginout = out + in[i];endend endmodule題目描述2:。輸入一個(gè)4位的輸入向量in[3:0],輸出每個(gè)比特和它相鄰比特之間的一些關(guān)系:
- out_both:這個(gè)輸出向量的每一位應(yīng)該表示對(duì)應(yīng)的輸入位和它左邊的比特位(左邊比特具有更高的索引)是否均為“1”。舉例說(shuō)明,out_both[2]應(yīng)該指示出in[2]和in[3]是否均為1。
- out_any:這個(gè)輸出向量的每一位都應(yīng)該表示相應(yīng)的輸入位和它右邊的比特位是否存在“1”。
- out_different:這個(gè)輸出向量的每一位都應(yīng)該表明相應(yīng)的輸入位是否與其左邊的比特位不同。
Solution2:
思路一:
module top_module( input [3:0] in,output [2:0] out_both,output [3:1] out_any,output [3:0] out_different );integer i;always @(*) beginfor(i=0;i<3;i++) beginout_both[i] = in[i] & in[i+1];out_any[i+1] = in[i+1] | in[i];out_different[i] = in[i] ^ in[i+1];endout_different[3] = in[0] ^ in[3];endendmodule思路二:
module top_module( input [3:0] in,output [2:0] out_both,output [3:1] out_any,output [3:0] out_different );assign out_both = in[2:0] & in[3:1];assign out_any = in[3:1] | in[2:0];assign out_different = in[3:0] ^ {in[0],in[3:1]};endmodule題目描述3:題目同上,但輸入向量變?yōu)?00位。
Solution3:
思路一:
module top_module( input [99:0] in,output [98:0] out_both,output [99:1] out_any,output [99:0] out_different );integer i;always @(*) beginfor(i=0;i<99;i++) beginout_both[i] = in[i] & in[i+1];out_any[i+1] = in[i+1] | in[i];out_different[i] = in[i] ^ in[i+1];endout_different[99] = in[0] ^ in[99];endendmodule思路二:
module top_module( input [99:0] in,output [98:0] out_both,output [99:1] out_any,output [99:0] out_different );assign out_both = in[98:0] & in[99:1];assign out_any = in[99:1] | in[98:0];assign out_different = in[99:0] ^ {in[0],in[99:1]};endmodule總結(jié)
- 熟悉了基本的邏輯門操作。
- 學(xué)習(xí)了硬件工程師的設(shè)計(jì)思維:由輸出到輸入。
- 學(xué)習(xí)了用標(biāo)準(zhǔn)的邏輯門實(shí)現(xiàn)查找表的功能。
- 合理使用assign或for循環(huán)對(duì)向量的各bit位進(jìn)行操作。
總結(jié)
以上是生活随笔為你收集整理的HDLBits答案(6)_硬件模块设计的思考方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android工程的编译过程
- 下一篇: unix网络编程 str_cli epo