在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2652|回复: 3

[求助] 想做XILINX硬件实现自动售货机,生成比特流出错

[复制链接]
发表于 2015-8-22 13:15:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
如题,verilog程序写得没有问题,已做过仿真,但不知为何生成比特流总是失败,请求各位大神帮忙分析一下好嘛,万分感谢啦~(注:复位是用switch来实现)
代码如下:



  1. module thevendor(changeten,changefive,changeone,outp,clk,sort,coin10,coin5,coin1,rst,cancel,confirm);
  2. input clk,coin10,coin5,coin1,rst,cancel,confirm;
  3. input [1:0] sort;
  4. output reg [1:0] changeten;
  5. output reg changefive;
  6. output reg [2:0] changeone;
  7. output reg [1:0] outp;

  8. reg [2:0] current_state;
  9. reg [2:0] next_state;
  10. reg valid_juice_choice;
  11. reg key10_current,key10_last,key5_current,key5_last,key1_current,key1_last;
  12. reg valid_key10_input,valid_key5_input,valid_key1_input;
  13. reg coins_full;
  14. integer coins_sum;
  15. reg [1:0] changeten_value;
  16. reg changefive_value;
  17. reg [2:0] changeone_value;
  18. reg [1:0] outp_value;
  19. reg input_valid;


  20. parameter idle=3'b000;
  21. parameter juice=3'b001;
  22. parameter coins=3'b010;
  23. parameter purchase=3'b011;
  24. parameter quit=3'b100;

  25. //选饮料
  26. always@(posedge clk)
  27. begin
  28. if(sort==2'b01 | sort==2'b10 | sort==2'b11)
  29. valid_juice_choice<=1;
  30. else
  31. valid_juice_choice<=0;
  32. end

  33. //投币
  34. always@(posedge clk or posedge rst)
  35. begin
  36. if(rst)
  37.   begin
  38.     key10_current<=0;
  39.     key10_last<=0;
  40.     key5_current<=0;
  41.     key5_last<=0;
  42.     key1_current<=0;
  43.     key1_last<=0;
  44.     valid_key10_input<=1'b0;
  45.     valid_key5_input<=1'b0;
  46.     valid_key1_input<=1'b0;
  47. end
  48. else
  49.   begin
  50.     key10_current<=coin10;
  51.     key10_last<=key10_current;
  52.     key5_current<=coin5;
  53.     key5_last<=key5_current;
  54.     key1_current<=coin1;
  55.     key1_last<=key1_current;
  56.       if(key10_last==1'b1 && key10_current==1'b0)
  57.         valid_key10_input<=1'b1;
  58.              else if(key5_last==1'b1 && key5_current==1'b0)
  59.         valid_key5_input<=1'b1;
  60.       else if(key1_last==1'b1 && key1_current==1'b0)
  61.         valid_key1_input<=1'b1;
  62.       else begin
  63.                valid_key10_input<=1'b0;
  64.         valid_key5_input<=1'b0;
  65.         valid_key1_input<=1'b0;
  66.           end
  67.     end
  68. end

  69. //累加硬币
  70. always@(posedge clk)
  71. begin
  72. if(!valid_juice_choice)
  73. coins_sum<=0;
  74. else if(input_valid)
  75. begin
  76.         if(valid_key10_input)
  77.         coins_sum<=coins_sum+10;
  78.         else if(valid_key5_input)
  79.         coins_sum<=coins_sum+5;
  80.         else if(valid_key1_input)
  81.         coins_sum<=coins_sum+1;
  82.         else ;
  83. end
  84. else ;
  85. end


  86. //总金额够了吗
  87. always@(posedge clk)
  88. begin
  89. if(sort==2'b01)
  90. begin
  91. if(coins_sum>=10)
  92. begin
  93. coins_full<=1;
  94. input_valid<=0;
  95. end
  96. else
  97. begin
  98. coins_full<=0;
  99. input_valid<=1;
  100. end
  101. end
  102. else if(sort==2'b10)
  103. begin
  104. if(coins_sum>=14)
  105. begin
  106. coins_full<=1;
  107. input_valid<=0;
  108. end
  109. else
  110. begin
  111. coins_full<=0;
  112. input_valid<=1;
  113. end
  114. end
  115. else if(sort==2'b11)
  116. begin
  117. if(coins_sum>=20)
  118. begin
  119. coins_full<=1;
  120. input_valid<=0;
  121. end
  122. else
  123. begin
  124. coins_full<=0;
  125. input_valid<=1;
  126. end
  127. end
  128. else
  129. begin
  130. coins_full<=0;
  131. input_valid<=1;
  132. end
  133. end

  134. //出货、找零或者退款
  135. always@(posedge clk)
  136. begin
  137. if(coins_full && !confirm)
  138.         begin
  139.                 if(sort==2'b01)
  140.                 begin
  141.                         changeten_value=2'b00;
  142.                         changefive_value=1'b0;
  143.                         changeone_value=3'b000;
  144.                         outp_value=2'b01;
  145.                 end
  146.                 else if(sort==2'b10)
  147.                 begin
  148.                         if(coins_sum==14)
  149.                                 begin
  150.                                 changeten_value=2'b00;
  151.                                 changefive_value=1'b0;
  152.                                 changeone_value=3'b000;
  153.                                 outp_value=2'b10;
  154.                                 end
  155.                         else if(coins_sum==15)
  156.                                 begin
  157.                                 changeten_value=2'b00;
  158.                                 changefive_value=1'b0;
  159.                                 changeone_value=3'b001;
  160.                                 outp_value=2'b10;
  161.                                 end
  162.                         else if(coins_sum==20)
  163.                                 begin
  164.                                 changeten_value=2'b00;
  165.                                 changefive_value=1'b1;
  166.                                 changeone_value=3'b001;
  167.                                 outp_value=2'b10;
  168.                                 end
  169.                         else
  170.                                 begin
  171.                                 changeten_value=2'b00;
  172.                                 changefive_value=1'b0;
  173.                                 changeone_value=3'b000;
  174.                                 outp_value=2'b10;
  175.                                 end
  176.                 end
  177.                 else if(sort==2'b11)
  178.                         begin
  179.                                 changeten_value=2'b00;
  180.                                 changefive_value=1'b0;
  181.                                 changeone_value=3'b000;
  182.                                 outp_value=2'b11;
  183.                         end
  184.                 else
  185.                         begin
  186.                                 changeten_value=2'b00;
  187.                                 changefive_value=1'b0;
  188.                                 changeone_value=3'b000;
  189.                                 outp_value=2'b00;
  190.                         end
  191.         end
  192. else if(coins_full && cancel)
  193.         begin
  194.                 if(sort==2'b01)
  195.                         begin
  196.                                 changeten_value=2'b01;
  197.                                 changefive_value=1'b0;
  198.                                 changeone_value=3'b000;
  199.                                 outp_value=2'b00;
  200.                         end
  201.                 else if(sort==2'b10)
  202.                         begin
  203.                                 changeten_value=2'b01;
  204.                                 changefive_value=1'b0;
  205.                                 changeone_value=3'b100;
  206.                                 outp_value=2'b00;
  207.                         end
  208.                 else if(sort==2'b11)
  209.                         begin
  210.                                 changeten_value=2'b10;
  211.                                 changefive_value=1'b0;
  212.                                 changeone_value=3'b000;
  213.                                 outp_value=2'b00;
  214.                         end
  215.                 else
  216.                         begin
  217.                                 changeten_value=2'b00;
  218.                                 changefive_value=1'b0;
  219.                                 changeone_value=3'b000;
  220.                                 outp_value=2'b00;
  221.                         end
  222.         end
  223. else
  224. begin
  225. changeten_value=2'b00;
  226. changefive_value=1'b0;
  227. changeone_value=3'b000;
  228. outp_value=2'b00;
  229. end
  230. end

  231. //状态更新逻辑
  232. always@(posedge clk or posedge rst)
  233. begin
  234.   if(rst)
  235.     current_state <= idle;
  236.   else
  237.     current_state <= next_state;
  238. end


  239. //下一状态产生逻辑
  240. always@(confirm or cancel or current_state)
  241. begin
  242. case(current_state)
  243.     idle:begin
  244.       if(valid_juice_choice)
  245.         begin
  246.           if(confirm)
  247.         next_state <= juice;
  248.       else
  249.         next_state <= current_state;
  250.       end
  251.     else
  252.       next_state <= current_state;
  253.     end
  254.         juice:begin
  255.           if(coins_full)
  256.                 next_state <=coins;
  257.           else
  258.             next_state <=current_state;
  259.               end
  260.         coins:begin
  261.           if(!confirm)
  262.             next_state <= purchase;
  263.                 else if(cancel)
  264.                 next_state <= quit;
  265.                 else
  266.                 next_state <= current_state;
  267.                 end
  268.         purchase:begin
  269.           next_state <= current_state;
  270.           end
  271.         quit:begin
  272.           next_state <= current_state;
  273.           end
  274. endcase
  275. end

  276. //输出产生逻辑
  277. always@(current_state)
  278. begin
  279.   case(current_state)
  280.         idle:
  281.         begin
  282.         changeten<=2'b00;
  283.     changefive<=0;
  284.     changeone<=3'b000;
  285.     outp<=2'b00;
  286.         end
  287.         juice:
  288.         begin
  289.         changeten<=2'b00;
  290.     changefive<=0;
  291.     changeone<=3'b000;
  292.     outp<=2'b00;
  293.         end
  294.         coins:
  295.         begin
  296.         changeten<=2'b00;
  297.     changefive<=0;
  298.     changeone<=3'b000;
  299.     outp<=2'b00;
  300.         end
  301.         purchase:
  302.         begin
  303.         changeten<=2'b00;
  304.     changefive<=changefive_value;
  305.     changeone<=changeone_value;
  306.     outp<=outp_value;
  307.         end
  308.     quit:
  309.         begin
  310.         changeten<=changeten_value;
  311.     changefive<=changefive_value;
  312.     changeone<=changeone_value;
  313.     outp<=2'b00;
  314.         end
  315.   endcase
  316. end

  317. endmodule


复制代码


错误是这样的:
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 119: Module thevendor does not have a parameter named C_BASEADDR
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 120: Module thevendor does not have a parameter named C_HIGHADDR
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 121: Module thevendor does not have a parameter named C_SPLB_AWIDTH
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 122: Module thevendor does not have a parameter named C_SPLB_DWIDTH
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 123: Module thevendor does not have a parameter named C_SPLB_NUM_MASTERS
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 124: Module thevendor does not have a parameter named C_SPLB_MID_WIDTH
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 125: Module thevendor does not have a parameter named C_SPLB_NATIVE_DWIDTH
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 126: Module thevendor does not have a parameter named C_SPLB_P2P
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 127: Module thevendor does not have a parameter named C_SPLB_SUPPORT_BURSTS
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 128: Module thevendor does not have a parameter named C_SPLB_SMALLEST_MASTER
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 129: Module thevendor does not have a parameter named C_SPLB_CLK_PERIOD_PS
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 130: Module thevendor does not have a parameter named C_INCLUDE_DPHASE_TIMER
ERROR:HDLCompiler:597 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 131: Module thevendor does not have a parameter named C_FAMILY
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 134: Cannot find port SPLB_Clk on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 135: Cannot find port SPLB_Rst on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 136: Cannot find port PLB_ABus on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 137: Cannot find port PLB_UABus on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 138: Cannot find port PLB_PAValid on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 139: Cannot find port PLB_SAValid on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 140: Cannot find port PLB_rdPrim on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 141: Cannot find port PLB_wrPrim on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 142: Cannot find port PLB_masterID on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 143: Cannot find port PLB_abort on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 144: Cannot find port PLB_busLock on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 145: Cannot find port PLB_RNW on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 146: Cannot find port PLB_BE on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 147: Cannot find port PLB_MSize on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 148: Cannot find port PLB_size on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 149: Cannot find port PLB_type on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 150: Cannot find port PLB_lockErr on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 151: Cannot find port PLB_wrDBus on this module
ERROR:HDLCompiler:267 - "E:\abcvendorthethird\hdl\system_thevendor_0_wrapper.v" Line 152: Cannot find port PLB_wrBurst on this module
ERROR:EDK:546 - Aborting XST flow execution!
ERROR:EDK:440 - platgen failed with errors!
发表于 2015-8-22 18:46:23 | 显示全部楼层
你的ucf呢?
发表于 2015-8-22 21:20:19 | 显示全部楼层
怎么感觉你错误和文对不上
发表于 2015-9-4 14:14:01 | 显示全部楼层
本身代码就有不规范的地方,很多else为空,组合逻辑使用<=赋值,建议还是代码风格再好好整理下吧,工具不是万能的,verilog是用来描述硬件的,不是c语言
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 16:54 , Processed in 0.023941 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表