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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4231|回复: 22

[求助] 求助帖,FPGA,前仿真

[复制链接]
发表于 2017-7-23 16:34:17 | 显示全部楼层 |阅读模式

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

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

x
刚刚自学FPGA,做前仿真,结果输入信号都是高阻值(Z),检查位宽也配对,实在找不出问题了,谁能解答我的疑惑,谢谢谢谢 $D@E`QO9~WK`H(ZCF7FZDR8.png
发表于 2017-7-23 16:58:49 | 显示全部楼层
实例化的模块放在initial段后面,再试试
 楼主| 发表于 2017-7-23 17:54:58 | 显示全部楼层
谢谢你呀,不过还是不行呀
 楼主| 发表于 2017-7-23 17:57:52 | 显示全部楼层




  1. module counter2(clk1k,pinlvkin,rst_n,feedclko,count1kout ); //一秒之内的脉冲数

  2.          input   clk1k,rst_n,pinlvkin;
  3.          output feedclko;
  4.          output [18:0] count1kout;
  5.          
  6.          reg [15:0] counttest=16'h3e8;//(1000)D

  7.          reg [15:0] count;
  8.          reg [19:0] count1k;
  9.          reg [18:0] count1kout;
  10.          reg [3:0] countnum;
  11.          reg [19:0] feedclknum[7:0];
  12.          assign  feedclko=(count[15:0]<=counttest[15:0])? 1'b1:1'b0;


  13. always @ ( negedge clk1k or negedge rst_n )
  14.                  begin  
  15.                                  if( !rst_n )  
  16.                                                 begin
  17.                                                  count1kout[18:0]<=16'h000;
  18.                                                 end       
  19.                                  else if (count[15:0]==(counttest[15:0]+16'h010))
  20.                                                         begin
  21.                                                                 count1kout[18:0]<=//feedclknum[1][15:0];
  22.                                                                                                                 ((        feedclknum[0][19:0]+feedclknum[1][19:0]
  23.                                                                                                                   +feedclknum[2][19:0]+feedclknum[3][19:0]
  24.                                                                                                                   )>>2);//count1kout为1s内的脉冲数作为输出,即为频率
  25.                                                                                                                   
  26.                                                         end                               
  27.                  end
  28.                  
  29. always @ ( negedge clk1k or negedge rst_n ) //存储每个单位周期内的脉冲值(T=16ms)
  30.                 begin  
  31.                                  if( !rst_n )  
  32.                                                 begin
  33.                                                         feedclknum[0][19:0]<=18'h000;
  34.                                                         feedclknum[1][19:0]<=18'h000;
  35.                                                         feedclknum[2][19:0]<=18'h000;
  36.                                                         feedclknum[3][19:0]<=18'h000;
  37.                                                         feedclknum[4][19:0]<=18'h000;
  38.                                                         feedclknum[5][19:0]<=18'h000;
  39.                                                         feedclknum[6][19:0]<=18'h000;
  40.                                                         feedclknum[7][19:0]<=18'h000;
  41.                                                 end       
  42.                                 else
  43.                                 if (count[15:0]==(counttest[15:0]+16'h010))
  44.                                                         begin
  45.                                                          feedclknum[countnum[3:0]][19:0]<=(count1k[19:0]);
  46.                                                         end                               
  47.                 end
  48.                  
  49. always @ ( posedge clk1k or negedge rst_n ) //产生每个单位时间存储的序号(t=528ms)
  50.                  begin  
  51.                                  if( !rst_n )  
  52.                                                 begin
  53.                                                  countnum[3:0]<=4'h0;
  54.                                                 end               
  55.                                  else if (count[15:0]>=counttest[15:0])
  56.                                                         begin
  57.                                                                 countnum[3:0]<=countnum[3:0]+4'h1;
  58.                                                                 if (countnum[3:0]>3)
  59.                                                                         countnum[3:0]<=4'h0;
  60.                                                         end                                                       
  61.                  end
  62.                  
  63. always @ ( posedge clk1k or negedge rst_n )//控制计数周期
  64.                  begin  
  65.                                  if( !rst_n )  
  66.                                                 begin
  67.                                                  count[15:0]<=16'h00;       
  68.                                                 end               
  69.                                  else
  70.                                                  begin
  71.                                                                  if (count[15:0]>=(counttest[15:0]+15'h210))//
  72.                                                                                         begin
  73.                                                                                          count[15:0]<=16'h00;
  74.                                                                                         end                                                       
  75.                                                                  else
  76.                                                                                         begin
  77.                                                                                          count[15:0]<=count[15:0]+16'h01;       
  78.                                                                                         end
  79.                                                  end
  80.                  end        
  81.          
  82. always @ ( posedge pinlvkin or negedge rst_n ) //在1s内对输入的脉冲进行计数
  83.                  begin  
  84.                                  if( !rst_n )  
  85.                                                                                 begin
  86.                                                                                  count1k[19:0]<=19'h00;                                               
  87.                                                                                 end               
  88.                                  else
  89.                                                                                 begin
  90.                                                                                                  if (count[15:0]>=(counttest[15:0]+16'h20))//计数后清零,准备重新计数
  91.                                                                                                                         begin
  92.                                                                                                                          count1k[19:0]<=19'h00;
  93.                                                                                                                         end
  94.                                                                                                  else if (count[15:0]<counttest[15:0])//计数
  95.                                                                                                                         begin
  96.                                                                                                                          count1k[19:0]<=count1k[19:0]+19'h01;//count1k[19:0]为1s内的脉冲数
  97.                                                                                                                         end
  98.                                                                                 end
  99.                  end                   
  100.          


  101. endmodule



复制代码
回复 2# 江山无限辉
 楼主| 发表于 2017-7-23 18:00:07 | 显示全部楼层
回复 2# 江山无限辉
这是模块代码,你帮我看下,我刚刚自学这个,不是很懂,谢谢您啦
发表于 2017-7-24 15:40:00 | 显示全部楼层
module名是counter2,为什么例化的时候是counter uut?
发表于 2017-7-24 21:15:17 | 显示全部楼层
楼上正解
发表于 2017-7-25 09:22:15 | 显示全部楼层
楼上正解
 楼主| 发表于 2017-7-25 09:52:29 | 显示全部楼层


问题貌似不在这,我把counter uut改成了counter2,依旧没解决,我这样设置激励不觉得有错呀
 楼主| 发表于 2017-7-25 09:54:43 | 显示全部楼层




  1. module counter_test;

  2.         // Inputs
  3.         reg clk1k;
  4.         reg pinlvkin;
  5.         reg rst_n;

  6.         // Outputs
  7.         wire feedclko;
  8.         wire [18:0] count1kout;

  9.          

  10.         initial begin
  11.                 // Initialize Inputs
  12.                 clk1k = 1'b0;
  13.                 pinlvkin = 1'b0;
  14.                 rst_n = 1'b0;

  15.                 // Wait 100 ns for global reset to finish
  16.                 #100;
  17.                  rst_n =1'b1;
  18.                 end
  19.                 counter (
  20.                 .clk1k(clk1k),
  21.                 .pinlvkin(pinlvkin),
  22.                 .rst_n(rst_n),
  23.                 .feedclko(feedclko),
  24.                 .count1kout(count1kout)
  25.         );
  26.   always #500 clk1k = ~ clk1k; //产生 1kHz 时钟源
  27.   always #19  pinlvkin = ~ pinlvkin;
  28. endmodule
  29.         


复制代码
回复 6# gaurson
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-29 15:13 , Processed in 0.040397 second(s), 7 queries , Gzip On, Redis On.

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