1、組合邏輯
組合邏輯是指輸出只與當前的輸入邏輯電平有關,與電路的原始狀態無關的邏輯電路,屬於無記憶電路,常用於多路器、加法器、譯碼器等
1.1 assign語句實現
問號表達式的形式
assign data_out = en ? a:b;
1.2 always塊實現
一般的應用主要在三段式狀態機中的狀態轉移判斷中,三段式狀態機語句分別爲:次態遷移到現態、狀態轉移條件判斷、次態寄存器輸出。
//參數聲明
parameter IDLE = 2'b00;
parameter S0 = 2'b01;
parameter S1 = 2'b10;
//內部信號聲明
reg[1:0] current_state;
reg[1:0] next_state;
//信號輸出
reg data_out;
//第一段:狀態寄存器的保存
always @ (posedge clk or negedge Rst_n)
begin
if(!Rst_n)
current_state <= IDLE;
else
current_state <= next_state;
end
//第二段 次態的組合邏輯
always @ (w_i or current_state)
begin
case(current_state)
IDLE:begin
if(w_i) next_state = S0;
else next_state = IDLE;
end
S0: begin
if(w_i) next_state = S1;
else next_state = IDLE;
end
S1: begin
if(w_i) next_state = S1;
else next_state = IDLE;
end
default : next_state = 2'bxx;
endcase
end
//第三段:輸出邏輯
always @ (*)
beign
case(current)
IDLE: data_out = 1'b0;
S0: data_out = 1'b0;
S1: data_out = 1'b1;
default: data_out = 1'bz;
endcase
end
2、時序邏輯電路
時序邏輯電路是含有存儲元件(如D觸發器)能夠暫存信息,有記憶性,一般通過always語句塊實現,可以利用posedge和negedge來捕獲時鐘上升或下降沿描述時序邏輯電路。
3、狀態機
3.1 摩爾狀態機
框圖
代 碼如1.2節
3.2 米利狀態機
[框圖]
代碼
//第一段:狀態寄存器的保存
always @ (posedge clk )
begin
current_state <= next_state;
end
//第二段 組合邏輯和狀態輸出
always @ (w_i or current_state)
begin
case(current_state)
IDLE:begin
data_out = 1'bz;
if(w_i) next_state = S0;
else next_state = IDLE;
end
S0: begin
data_out = 1'b0;
if(w_i) next_state = S1;
else next_state = IDLE;
end
S1: begin
data_out = 1'b1;
if(w_i) next_state = S1;
else next_state = IDLE;
end
default : next_state = 2'bxx;
endcase
end
3、如何在Quartus II軟件中生成自定義IP CORE?
描述
您可以使用Quartus®II軟件通過以下步驟生成自定義的IPCORE:
1.創建一個新項目,添加客戶verilog / VHDL代碼文件,然後將此文件設置爲頂級實體。然後運行Analysis&Elaboration。
2.選擇Quartus II軟件菜單(Project - > Export Design Partation …)並生成xxx.qxp文件。
3.使用生成的xxx.qxp文件作爲IPCORE。