在Verilog中调用函数

时间:2016-12-21 18:57:43

标签: function verilog

当我调用该函数时,每次进入if块时都无法进入else块。每次从函数返回4'b1111。 我尝试打印[3:0] data。它给了我“xxxx”。 我该如何解决这个问题。

module workout(DATA1, OPCODE , OUTPUT);

input [7:0] DATA1;

input [3:0] OPCODE;

output reg [7:0] OUTPUT;

initial OUTPUT = func_call(DATA1);


function [3:0] func_call;
input [3:0]data;
begin

if(data[3:0] == 4'b0001)    
        func_call= 4'b0011;
else 
        func_call= 4'b1111;

endfunction

1 个答案:

答案 0 :(得分:0)

主要问题是您使用try { PackageInfo info = getPackageManager().getPackageInfo( "theo.testing.facebookapp", PackageManager.GET_SIGNATURES); for(Signature signature:info.signatures){ MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); System.out.println("KeyHash : " + Base64.encodeToString(md.digest(),Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } 块来表示应该连续分配的内容。

initial块仅在时间0开始。一旦块完成执行,它就不会再次启动。 initial用于初始化和测试平台。 FPGA允许仅为零时初始化目的合成initial。 IC不支持initial进行综合(完善异步复位)。

initial语句是连续的。 assign块永久运行但有时间阻止程序语句(例如:always@*)。

一种选择是将@(posedge clock)更改为initialalways @*

always @(DATA1)

或者通过删除always @* OUTPUT = func_call(DATA1); 并使用OUTPUT语句

来使reg成为有线类型
assign

另请注意,output [7:0] OUTPUT; assign OUTPUT = func_call(DATA1); 为8位,DATA1需要4位输入。 Verilog会允许它但你应该收到警告。最好指定要使用的位范围。示例:func_call