天天看點

第一節 FPGA中的基本運算第一節 FPGA中的基本運算*

第一節 FPGA中的基本運算*

1、算術運算(按位運算)

與&、或|、非~、異或^

2、邏輯運算

與&&、或||、非!

下面來看程式,看他們分别會産生什麼電路?`

module and_gate(

input wire a,

input wire b,

output wire s

);

assign s=a&b;

endmodule

第一節 FPGA中的基本運算第一節 FPGA中的基本運算*

二輸入與門,輸入位寬1bit。

接下來我i們改一下代碼。

module and_gate(
input wire a,
input wire b,
output wire s
    );
assign s=a&&b;

endmodule
           
第一節 FPGA中的基本運算第一節 FPGA中的基本運算*

輸入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
           
第一節 FPGA中的基本運算第一節 FPGA中的基本運算*

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
           
第一節 FPGA中的基本運算第一節 FPGA中的基本運算*

可以看出,首先分别對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
           
第一節 FPGA中的基本運算第一節 FPGA中的基本運算*

也就是進行了s=a[3]&a[2]&a[1]&a[0];如果等于0,說明裡面至少有一個0。

請讀者思考,1、所有的邏輯門都可以用與非門表示,fpga裡面按有門電路嗎?

2、自行完成剩下的或、非門的算術運算和邏輯運算,看看他們會出現什麼電路。下一節課将會教大家如何進行modelsim仿真。