verilog 的一个奇怪的问题

2019-03-25 10:28发布

我用Synplify做了个普通定点格式(第47位是符号位,46到29位是整数位,28到0位是小数位)转换成ieee754格式的模块,但是编译中出现了这样一条编译错误信息@E:CL104 : changeto754.v(62) | Couldn't find binding for variable index。。。我都束手无策了,index明明已经定义了,为什么编译会提示index未加约束这样的错误信息呢??求助啊!!!(下面是全部代码)
  1. `define M 18
  2. `define N 29
  3. //????????????256
  4. module changeto754(data754,datain,clk,rst_n);
  5. output [31:0] data754;
  6. input [`M+`N:0] datain;
  7. input clk,rst_n;
  8. reg [7:0] index;
  9. //reg [7:0] j;
  10. reg [`M+`N-1:0] data,men[`M+`N];
  11. reg [7:0] E;
  12. reg [22:0] F;
  13. reg [2:0] state;
  14. reg S;
  15. parameter s0=0;
  16. parameter s1=1;
  17. parameter s2=2;
  18. parameter s3=3;
  19. assign data754[31]=S;
  20. assign data75[30:23]=E;
  21. assign data754[22:0]=F;
  22. always@(posedge clk)
  23. begin
  24. if(rst_n==0)
  25. begin
  26. index<=`M+`N-1;
  27. E<=8'd0;
  28. F<=23'd0;
  29. state<=s0;
  30. S<=1'b0;
  31. //for(j=8'd0;j<=(`M+`N);j=j+8'd1)
  32. // men[j]={{(`M+`N-j){1'b0}},{j{1'b1}}};
  33. end
  34. else
  35. begin
  36. case(state)
  37. s0:
  38. begin
  39. if(datain[`M+`N])
  40. begin
  41. data<=~datain[`M+`N-1:0]+1;
  42. S<=1'b1;
  43. end
  44. //else S<=1'b0;
  45. state<=s1;
  46. end
  47. s1:
  48. begin
  49. if(data[index]) //?????????1
  50. begin
  51. E<=8'd127+index-`N;
  52. if(index==0) F<=23'd0;
  53. else
  54. begin
  55. if(index>22) F<=data>>(index-23);//data cut
  56. else //F[22:23-index]<=data[index-1:0];
  57. begin
  58. if(`M+`N>22) F<=(data|{{(`M+`N-index){1'b0}},{index{1'b1}}})<<(23-index);
  59. else F<=({{(23-`M-`N){1'b0}},data}|{{(23-index){1'b0}},{index{1'b1}}})<<(23-index);
  60. end
  61. end
  62. state<=s2;
  63. end
  64. else
  65. begin
  66. if(index==0) //???????1
  67. begin
  68. E<=8'd127;
  69. F<=23'd0;
  70. state<=s2;
  71. end
  72. else
  73. begin
  74. index<=index-1;
  75. end
  76. end
  77. end
  78. endcase
  79. end
  80. end
  81. endmodule
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
eeleader
1楼-- · 2019-03-25 15:43
< /

等待VERILOG高手出现!解决所有的问题!

xieqiang
2楼-- · 2019-03-25 17:52
没看懂程序,但
1、assign data75[30:23]=E; 此处有错误,应该是笔误
2、index报错。Error (10734): Verilog HDL error at changeto754.v(62): index is not a constant
这两句有问题
if(`M+`N>22) F<=(data|{{(`M+`N-index){1'b0}},{index{1'b1}}})<<(23-index);
else F<=({{(23-`M-`N){1'b0}},data}|{{(23-index){1'b0}},{index{1'b1}}})<<(23-index);
此处,拼接运算符里面加逗号就编译通过了!
但楼主的意思应该是{4{a}} = {a,a,a,a}这种意思。刚查了下书,这里,这个4,必须是常数表达式!!

[ 本帖最后由 xieqiang 于 2011-3-30 21:00 编辑 ]
eeleader
3楼-- · 2019-03-25 19:32

好,解析的好!

1067941083
4楼-- · 2019-03-25 23:41
 精彩回答 2  元偷偷看……

一周热门 更多>