找回密码
 注册
关于网站域名变更的通知
查看: 326|回复: 2
打印 上一主题 下一主题

verilog 自动售货机 编译后说我的激励文件有语法问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-4 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
  • module machine(clk,money_in1,money_in2,money_out,item_out,state);
  • input clk;
  • input money_in1; //投入10
  • input money_in2; //投入50
  • output logic [7:0] money_out; //退款或找零的钱数
  • output logic item_out;
  • output logic [2:0] state; //状态机的状态
  • logic timeing; //计时状态
  • logic [31:0] time_cnt_s;
  • logic [8:0] time_cnt_l;
  • logic [7:0] money_sum;
  • logic [7:0] money_sum1;
  • logic [7:0] money_sum2;
  • parameter S_init=4'b00,S_enough=4'b01,S_change=4'b10,S_out=4'b11;
  • parameter item=7'd50;
  •         initial
  •         begin
  •                 state=S_init;
  •                 money_sum1=0;
  •                 money_sum2=0;
  •         end
  •         always@(posedge clk) //分频模块,波形测试时需减小分频,方便看波形
  •         begin
  •                 IF(state==S_init)
  •                 begin
  •                         time_cnt_s=0;
  •                         time_cnt_l=0;
  •                 end
  •                 if(timeing)
  •                         time_cnt_s=time_cnt_s+1;
  •                 if(time_cnt_s==32'd5_000_000)
  •                         time_cnt_l=time_cnt_l+1;
  •         end
  •         always@(posedge money_in1) //投币模块,上升沿为投币
  •         begin
  •                 if(timeing)
  •                 money_sum1=money_sum1+10;
  •         end
  •         always@(posedge money_in2) //投币模块,上升沿为投币
  •         begin
  •                 if(timeing)
  •                 money_sum2=money_sum2+50;
  •         end
  •         always@(posedge clk)
  •         begin
  •                 case(state)
  •                 S_init:
  •                 begin
  •                         timeing=0;
  •                         money_sum=0;
  •                         money_out=0;
  •                         item_out=7'b00;
  •                 end
  •          end
  •                 S_enough:
  •                 begin
  •                                 money_sum=money_sum1+money_sum2;
  •                                 if(money_sum>=item)
  •                                 begin
  •                                         money_sum=money_sum-item; //求出找钱数
  •                                         state=S_change;
  •                                 end
  •                 end
  •                 S_change:
  •                 begin
  •                         if(money_sum>0)
  •                         begin
  •                                 money_out=money_sum;
  •                                 state=S_out;
  •                         end
  •                         else
  •                                 state=S_out;
  •                 end
  •                 S_out:
  •                 begin
  •                         item_out=item;
  •                         state=S_init;
  •                 end
  •         endcase
  • endmodule
  • module machine_test;
  • reg clk;
  • reg money_in1;
  • reg money_in2;
  • wire item_out;
  • wire [7:0]  money_out;
  • wire [2:0]  state;
  • machine i1 (
  •         .clk(clk),
  •         .item_out(item_out),
  •         .money_in1(money_in1),
  •         .money_in2(money_in2),
  •         .money_out(money_out),
  •         .state(state)
  •         );
  • initial  begin
  • $dumpfile("machine.vcd");
  • $dumpvars(0,machine_test);
  • clk=0;
  • money_in1=0;
  • money_in2=0;
  • #100 money_in1=10;
  • #100 money_in1=10;
  • #100 money_in2=50;
  • #100
  • $finish;
  • end
  • always #5 clk=~clk;
  • endmodule
  • 7 Z8 ]1 o; C9 a( K. E# c

$ P4 @- I1 z% y: D

该用户从未签到

2#
发表于 2020-6-4 19:49 | 只看该作者
确实有问题。
! g( c6 z% p8 H: i" \3 v" R) o//-------& y& _- ]5 ~" P9 [; a! A
01.大小写可能是上传过程中出现的,这个修改后忽略;
7 P2 C. y/ z, ?" H0 ^* \# ?02.看你上传代码的Line_57~Line_68,已经是一个完整的always块了,但是下面还有状态机代码。如果不是上传过程中出现的此种情况,这算一个错误了。
4 j6 {7 P. b9 S! Q03.代码中的logic是什么?如果不是上传过程中出现的此种情况,这是一个错误。logic要根据具体情况判断是reg还是wire。4 f$ q' d8 [$ i# i
04.不规范情况。在时序逻辑中使用阻塞赋值。例如time_cnt_s/time_cnt_1。

该用户从未签到

3#
发表于 2020-6-4 19:52 | 只看该作者
改吧,主要是组合逻辑/时序逻辑/阻塞赋值/非阻塞赋值的问题。建议改之前搜索一下三段式状态机的写法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-21 19:19 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表