我在触发器上保存了3个值。在FSM上的某个状态期间,我想检测哪个是更大的值,并且因此,将数字输出到存储器中。
在顶层模块文件的一侧,我正在写这样的函数:
ARRAY=()
while read LINE
do
ARRAY+=("$LINE")
done < $tempDir/text.txt
for LINE in "${ARRAY[@]}"
do
echo "$LINE" | sed -n ‘/B:/p' | sed 's/S:.*//' | sed -n -e 's/^.*M://p' | sed -n -e 's/-//p' >>/$tempDir/R128M.txt
done
for LINE in "${ARRAY[@]}"
do
echo "$LINE" | sed -n '/M:/p' | sed 's/I:.*//' | sed -n -e 's/^.*S://p' | sed -n -e 's/-//p' >>$tempDir/R128S.txt
done
cat $tempDir/R128M.txt
M=( $(sort $tempDir/R128M.txt) )
cat $tempDir/R128S.txt
S=( $(sort $tempDir/R128S.txt) )
然后在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
我想问一下我是否正确定义和调用函数,当我使用函数时,我理解我必须使用与“变量”相同的函数名称并用它来定义一个案例,对?那么如何定义该函数的输入,就像我在“HERE ???”中所做的那样
此外,如果只有3个可能的答案,并且组合未被使用,那么默认情况下要定义什么?
答案 0 :(得分:1)
功能声明是对的。为什么try:
import Tkinter as tk # for Python2
except:
import tkinter as tk # for Python3
win=tk.Tk()
win.mainloop()
将其更改为input [7:-24]
。 if语句嵌套也是错误的。
input [23:0]
案件陈述没问题。虽然值必须以2&b; b为前缀,但它将假定值为十进制且不匹配。 case语句不一定总是有所有选项。您只需要3个或多个。最好添加一个默认语句。您可以将值分配给默认值中的x或仅用于模拟打印错误。
function [1:0] max_val;
input [23:0] A, B, C;
begin
max_val = 0 ;
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;
end
endfunction
答案 1 :(得分:1)
当我编写这种类型的东西时,我喜欢&#34;明确地&#34;说明每种情况下输出的内容,包括默认值,即使它是错误的。
关键是你可以得到一个编译器,当你点击2&#b; b01状态并且永远设置它时,它决定只分配mem_out1因为没有任何东西将它设置回零。不确定这是设计的重点还是可能是不受欢迎的行为。
case ( max_val(a,b,c) )
2'b01 : begin
{mem_out_3,mem_out_2,mem_out_1} = 3'b001;
end
2'b10 : begin
{mem_out_3,mem_out_2,mem_out_1} = 3'b010;
end
2'b11 : begin
{mem_out_3,mem_out_2,mem_out_1} = 3'b100;
end
// no need for 00 case
default : begin
// {mem_out_3,mem_out_2,mem_out_1} = 3'b000; // Uncomment if you need to control the output in the event of an error
$display(" error val ");
end
endcase