微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > vivado上做Verilog,for循环语句出现问题

vivado上做Verilog,for循环语句出现问题

时间:10-02 整理:3721RD 点击:
这是我们作业中的一个实验,要求是通过basys3实验板上的16个开关,手动输入一个0101字串(sw),然后检测11011字串出现的次数,并将结果显示在7段显示器上(a_to_g控制)。
其中seqdeta 是一个计算模块,输入的din表示当前数字,通过状态转移,如果匹配到11011字串,那么dout+1;
我是想每次sw也就是按钮拨动事,让dout清零,然后做一次16位的for循环,最后把dout结果输出到屏幕上。
但是实际结果是:起始dout设置为几,那么最后输出的就是几,seqdeta 这个模块并没有对dout产生作用,急急急!
是不是for循环不能这么用?因为source中显示我的top文件只有x7seg显示模块,没有seqdeta模块。

  1. //top文件
  2. `timescale 1ns / 1ps

  3. module seqdeta_top(
  4. input wire clk,
  5. input wire[3:3] btn,
  6. input wire[15:0] sw,
  7. output wire[6:0] a_to_g,
  8. output wire [3:0] an,
  9. output wire dp
  10. );
  11. reg [3:0] dout;
  12. reg din;
  13. reg [15:0] data;

  14. integer i;
  15. always @(posedge sw)
  16. begin
  17.     dout=4'h0;//清零操作
  18.     data =0;i=i-1)
  19.     begin
  20.         din<=data;
  21.         seqdeta seq(clk,btn[3],din,dout);//计算模块
  22.     end
  23. end


  24. wire [15:0] x;
  25. assign x[3:0]=dout;
  26. x7seg x7(clk,x,btn[3],a_to_g,an,dp);//显示模块
  27. endmodule


  28. //deqdeta文件
  29. module seqdeta(
  30. input wire clk,
  31. input wire clr,
  32. input wire din,
  33. output wire[3:0] dout
  34. );
  35. reg [2:0] present_state, next_state;
  36. parameter S0 = 3'b000, S1 = 3'b001, S2 = 3'b010,
  37. S3 = 3'b011, S4 = 3'b100,S5=3'b101; // states
  38. //State registers
  39. always @(posedge clk or posedge clr)
  40. begin
  41.     if( clr == 0)
  42.         present_state <= S0;
  43.     else
  44.         present_state <= next_state;
  45. end
  46. //C1 module
  47. always @(*)
  48. begin
  49. case(present_state)
  50.     S0: if(din == 1)
  51.             next_state <= S1;
  52.         else
  53.             next_state <= S0;
  54.     S1: if(din == 1)
  55.             next_state <= S2;
  56.         else
  57.             next_state <= S0;
  58.     S2: if(din == 0)
  59.             next_state <= S3;
  60.         else
  61.             next_state <= S2;
  62.     S3: if(din == 1)
  63.             next_state <= S4;
  64.         else
  65.             next_state <= S0;
  66.     S4: if(din == 1)
  67.             next_state <= S5;
  68.         else
  69.             next_state <= S0;
  70.     S5:if(din==1)
  71.             next_state <= S2;
  72.          else
  73.             next_state <= S3;
  74.     default: next_state <= S0;
  75.     endcase
  76. end

  77. //C2 module
  78. always @(*)
  79. begin
  80.     if(next_state == S5)
  81.         dout = dout+1;
  82. end
  83. endmodule

复制代码


来人看看吧!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top