请问如何用fpga读取外部传来的信号,控制小灯点亮?

2019-07-15 20:41发布

最近学校进行项目设计,我们的设计中有一部分是利用小型的光电传感器(样式如下图),
利用学校所发的开发板上外接端口的3.3v和gnd端口作为传感器的电源,信号引脚接到另一个外接端口上,用来读取传感器发出的信号。当有障碍物接近时,信号输出为低,反之则高。当信号为高时,板子上的一个led小灯点亮。


问题是,无论信号如何变化,小灯始终没有反应,我的代码如下:

使用的软件是vivado(学校硬性要求),百度了很多帖子,没有找到类似的代码,

请各位大神指教,是我的代码本身就有问题还是其他的原因,谢谢!
  1. module gm(
  2.     input clk,
  3.     input cgq,
  4.     output reg led
  5.     );
  6.     reg cgq_dly;
  7.     wire cgq_vld;
  8.    
  9.     always @(posedge clk)
  10.         cgq_dly <= cgq;
  11.     assign cgq_vld = cgq & ~cgq_dly;  //捕捉尖端脉冲信号
  12.    
  13.     always @(posedge clk)
  14.         if(cgq_vld)    //信号为高时,小灯点亮,反之则灭
  15.             led <= 1'b1;
  16.         else led <= 1'b0;
  17. endmodule
复制代码
超级截屏_20181222_084745.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
碎碎思
1楼-- · 2019-07-16 01:56
首先确定是否是硬件问题:
1.图上的红外传感器需要进行灵敏度调节,即那个旋钮,用示波器看下out引脚电平是否有高低电平的输出,还有看下输出电压是否为3.3V;
2.对于FPGA来说在out引脚进行分配时,看下电平等级是否为3.3V。
3.LED灯,自己给个高低电平测试一下能不能亮。
软件问题:
仿真一下就知道了,时序是不是你要求的
郑大海
2楼-- · 2019-07-16 01:59
不是不亮,是时间太短了。你的代码里,clk的每次上升沿都要判断输入信号下降沿(是否有障碍物),同时在跳边沿来临时刻点亮led,跳边沿过去之后,led就被赋值0了。但是这个跳边沿时间太短了吧,应该加一个延时,就能看到了。
狂野的牛哥
3楼-- · 2019-07-16 05:28
这个传感器我以前用过,距离大一些就很不准了。在你的描述中,是接近障碍物输出信号为低,但是你的程序为什么捕捉的是上升沿??你捕捉的这个尖端脉冲是,忽然上升会使得cgq_vld置1,下个clk正跳变过来时候,led置1.
defisker
4楼-- · 2019-07-16 06:11
 精彩回答 2  元偷偷看……
nianhai1212
5楼-- · 2019-07-16 08:38
时间太短了吧?一个脉冲是一个时钟周期,可以加个延时试试,可以加个ila抓下波形看看,进来的信号什么样。
吻痕犹在
6楼-- · 2019-07-16 08:53
如果是想看时序问题的话,写个testbench仿真一下较好的
另外我个人是不推荐去判断 wire 型数据的。
还有就是楼上所说的,你只给了一个周期的使能信号,感觉应该是看不到。
你可以将输入信号的上升沿作为使能的开始,下降沿作为使能的结束。
祝成功

一周热门 更多>