我有3個值保存在觸發器上。在FSM的某個狀態期間,我想檢測哪一個是較大的值,並因此將一個數字輸出到存儲器中。如何正確編程verilog中的「函數」,對於這個特定的例子?
在頂部模塊文件的一面,我寫這樣的功能:FSM的狀態下
function [1:0] max_val;
input [7:-24] A, B, C;
begin
if (A > B)
begin
if (A > C)
max_val = 2'b01;
else
max_val = 2'b11;
end
else if(B > C)
max_val = 2'b10;
else
max_val = 2'b11;
else
max_val = 2b'00;
end
endfunction
那麼我這樣做:
S13:
begin
case (max_val(FF_v1, FF_v2, FF_v3)) /// HERE??
01:
begin
mem_out1 = 1;
end
10:
begin
mem_out2 = 1;
end
11:
begin
mem_out3 = 1;
end
00:
begin
... /// what to do here??
end
endcase
end
我會喜歡問我是否正確地定義和調用函數,當我使用該函數時,我知道我必須使用與「變量」相同的函數名稱並用它來定義一個案例,對吧?那麼如何定義該函數的輸入,就像我在「HERE ???」中所做的那樣
此外,如果只有3個可能的答案,並且一個組合未被使用,那麼默認定義什麼?