|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我想做一个把pseudo thermometer code转换成thermometer code,然后再转换成binary, 写了一段verilog。
在ISE的testbench里面用了几个输入测试,结果都还正常,
00000.....0000111 --> 000011
111100.....000111 --> 000011
但是用spectral里面做仿真时,结果很奇怪,不管输入是什么:
如果输出悬空,结果都是不定态***,
如果输出接一个大电阻,然后接地,那么输出就是全0;
不知道为什么。
请问是不是verilog里面不能用function,还是不能用for循环。请高手指教。代码贴在后面了。
module d_con_tdc_64b (tdc_data, vcon);
//input output
input [62:0] tdc_data;
output [5:0]vcon;
// use a function to pre_process the input data
wire [62:0]tem= high_zero(tdc_data);
function [62:0]high_zero;
input [62:0]in_d;
integer i;
integer flag; //
begin
high_zero=62'd0;
flag=0;
for(i=0;i<63;i=i+1)
begin
if((in_d[i])&(flag==0))
high_zero[i]=1'b1;
else if(in_d[i]==(1'b0))
flag=1;
end
end
endfunction
// use a function to converter thermometer to binay
wire [5:0]tem2 = encode(tem);
function [62:0]encode;
input [62:0]in_d2;
integer counter;
begin
encode = 6'd0;
for(counter=0;counter<63;counter=counter+1)
assign encode = encode + tem[counter];
end
endfunction
assign vcon = tem2;
endmodule |
|