请问一下关于verilog赋值出现问题

2020-02-02 11:27发布

  1. timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 19:48:31 11/05/2017
  7. // Design Name:
  8. // Module Name: decoding
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 – File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module decoding(clk,In,Xout_VGA,Yout_VGA,Out,Ready,Xout_VGA_F,Yout_VGA_F,Rout,Cout);
  22. input clk;
  23. input [7:0]In;
  24. output reg [9:0]Xout_VGA;//X输出VGA
  25. output reg [9:0]Yout_VGA;//Y输出VGA
  26. output reg [9:0]Xout_VGA_F;//Y输出VGA目的地
  27. output reg [9:0]Yout_VGA_F;//Y输出VGA目的地
  28. output reg [7:0]Out;//输出
  29. output reg [4:0]Ready;//0为数据,1为D,2为.,3为X,4为Y,5为x,6为y,7为R,8为C,9为负号
  30. output reg[1:0]Rout;//=1记录
  31. output reg[1:0]Cout;//=1清除

  32. reg [1:0]Reading;//数据读取
  33. reg [1:0]XsReading;//小数读取标识
  34. reg [1:0]Sign;//1为正,0为负
  35. reg [9:0]Cache;//整数和整体数据缓冲
  36. reg [1:0]Count;//计数
  37. //D-12.34XD56.78Y
  38. initial
  39. begin
  40. Reading=0;
  41. Cache=0;
  42. Count=1;
  43. XsReading=0;
  44. Rout=0;
  45. Cout=0;
  46. end

  47. always [url=home.php?mod=space&uid=72445]@[/url] (posedge clk)
  48. begin
  49. Rout<=0;
  50. Cout<=0;
  51. Ready<=0;
  52. if(In==68)//D
  53. begin
  54. Reading<=1;
  55. Ready<=1;
  56. XsReading<=0;
  57. end
  58. if(In==45)//-
  59. begin
  60. Sign<=0;
  61. Ready<=9;
  62. end
  63. if(In==46)//.
  64. begin
  65. XsReading<=1;
  66. Ready<=2;
  67. end
  68. if(In==88||In==89||In==120||In==121)//X,x,Y,y
  69. begin
  70. Reading<=0;
  71. if(In==88)
  72. begin
  73. Ready<=3;
  74. end
  75. if(In==89)
  76. begin
  77. Ready<=4;
  78. end
  79. if(In==120)
  80. begin
  81. Ready<=5;
  82. end
  83. if(In==121)
  84. begin
  85. Ready<=6;
  86. end
  87. end
  88. if(In==82||In==67)//R或者C
  89. begin
  90. Reading<=0;
  91. XsReading<=0;
  92. if(In==82)
  93. begin
  94. Ready<=7;
  95. Rout<=1;
  96. end
  97. if(In==67)
  98. begin
  99. Ready<=8;
  100. Cout<=1;
  101. end
  102. end
  103. end

  104. always @ (posedge clk)
  105. begin
  106. //整数数据读取
  107. if(Reading==1&&XsReading==0&&In!=68&&Count==1&&In!=45)//第一位
  108. begin
  109. Cache<=In-48;
  110. Out<=Cache[7:0];
  111. Cache<=(Cache*10);
  112. Count<=2;
  113. end
  114. else if(Reading==1&&XsReading==0&&In!=68&&Count==2&&In!=45)//第二位
  115. begin
  116. Cache<=(Cache+In-48);
  117. Out<=In-48;
  118. Count<=1;
  119. end
  120. //小数
  121. if(Reading==1&&XsReading==1&&In!=68&&In!=45)
  122. begin
  123. Out<=In-48;
  124. end

  125. //输出为负数
  126. if(In==88&&Sign==0)
  127. begin
  128. Cache<=464-Cache*2;
  129. Xout_VGA<=Cache;
  130. Cache<=0;
  131. end
  132. else if(In==89&&Sign==0)
  133. begin
  134. Cache<=274+Cache*2;
  135. Yout_VGA<=Cache;
  136. Cache<=0;
  137. end
  138. else if(In==120&&Sign==0)
  139. begin
  140. Cache<=464-Cache*2;
  141. Xout_VGA_F<=Cache;
  142. Cache<=0;
  143. end
  144. else if(In==121&&Sign==0)
  145. begin
  146. Cache<=274+Cache*2;
  147. Yout_VGA_F<=Cache;
  148. Cache<=0;
  149. end
  150. //输出,为正数
  151. if(In==88&&Sign==1)
  152. begin
  153. Cache<=464+Cache*2;
  154. Xout_VGA<=Cache;
  155. Cache<=0;
  156. end
  157. else if(In==89&&Sign==1)
  158. begin
  159. Cache<=274-Cache*2;
  160. Yout_VGA<=Cache;
  161. Cache<=0;
  162. end
  163. else if(In==120&&Sign==1)
  164. begin
  165. Cache<=464+Cache*2;
  166. Xout_VGA_F<=Cache;
  167. Cache<=0;
  168. end
  169. else if(In==121&&Sign==1)
  170. begin
  171. Cache<=274-Cache*2;
  172. Yout_VGA_F<=Cache;
  173. Cache<=0;
  174. end

  175. end
  176. endmodule
复制代码
在这段程序中,In是从串口模块中接收的,然后X_out,Y_out,X_out_F,Y_out_F都是输出到VGA模块的,OUT模块的就是重新编码发到串口的TX(检验接收的数据对不对),
在整数数据读取这段代码中
  1. f(Reading==1&&XsReading==0&&In!=68&&Count==1&&In!=45)//第一位
  2. begin
  3. Cache<=In-48;
  4. Out<=Cache[7:0];
  5. Cache<=(Cache*10);
  6. Count<=2;
  7. end
复制代码
当Out<=Cache[7:0];的时候,串口调试助手第一位就永远是0,但是如果写成Out<=In-48;就可以读出正确数据,请问一下这是什么原因呢,谢谢了,程序的目的输入过来的数据都是D12.34XD56.78Y或者D-12.34XD-56.78Y,也就是需要把整数位解码出来,D是起始标志,X,Y可以换为x,y,输入R,C都是在另一个VGA模块中保存/清除的指令
0条回答

一周热门 更多>