第一節 FPGA中的基本運算*
1、算術運算(按位運算)
與&、或|、非~、異或^
2、邏輯運算
與&&、或||、非!
下面來看程式,看他們分别會産生什麼電路?`
module and_gate(
input wire a,
input wire b,
output wire s
);
assign s=a&b;
endmodule

二輸入與門,輸入位寬1bit。
接下來我i們改一下代碼。
module and_gate(
input wire a,
input wire b,
output wire s
);
assign s=a&&b;
endmodule
輸入1bit時,算術與與邏輯與是一樣的電路。
接下來把位寬增到2bit試試。注意咱們寫的程式是組合邏輯電路,不帶記憶功能,輸入輸出唯一确定。
assign關鍵字必須引領wire類型,而且要使用‘=’進行指派。
module and_gate(
input wire [1:0]a,
input wire [1:0]b,
output wire [1:0]s
);
assign s=a&b;
endmodule
b[1]與a[1]按位與,b[0]與a[0]按位與,輸出到s[1]和s[0]中。
改成邏輯與。
module and_gate(
input wire [1:0]a,
input wire [1:0]b,
output wire [1:0]s
);
assign s=a&&b;
endmodule
可以看出,首先分别對a,b進行了或運算,判斷是否為真值,再進行邏輯與運算,有效位數為1位,但我們定義的s是2bit,故補0。
把a擴大到4bit,進行縮減運算看看。
module and_gate(
input wire [3:0]a,
//input wire [1:0]b,
output wire [1:0]s
);
assign s=&a;
endmodule
也就是進行了s=a[3]&a[2]&a[1]&a[0];如果等于0,說明裡面至少有一個0。
請讀者思考,1、所有的邏輯門都可以用與非門表示,fpga裡面按有門電路嗎?
2、自行完成剩下的或、非門的算術運算和邏輯運算,看看他們會出現什麼電路。下一節課将會教大家如何進行modelsim仿真。