怎样通过DSP控制FPGA端的LED灯亮灭的速度
如题,本人最近遇到一个困难,就是通过DSP控制FPGA端的LED亮灭的频率,LED是接在FPGA上面的,其亮灭的频率由DSP控制。本人的思路如下
在FPGA里面下一个寄存器,映射到DSP里面的地址是0x60008000(地址只是举个例子),DSP可以向该段寄存器里面写入数据,FPGA段读取该寄存器里面的内容作为计数器count的计数值,在fpga段count一直在执行减一操作,当count减到1的时候,LED灯的状态实现反转。以上就是我的思路,但是在写FPGA段的代码的时候出现问题,不知道大家发现没有,如果按照上面的方法,FPGA段使用的count就会有两个驱动源,一个是count在自减的时候count<=count-1'b1; 另一个是读取寄存器的值;这个在语法上面是不允许的,卡在这里了。。。。还请大家指点一下对于我以上的思路,FPGA端计数器的程序应该怎么写?
或者对于上面的项目,大家有没有别的好的思路,要求:通过DSP灵活控制FPGA端的LED亮灭频率。有两点注意的地方,1.一定要是DSP控制 2.一定要能灵活控制,即不允许在FPGA端设几个档位,然后由DSP去选择LED按照哪个档位亮灭,如果那样的话,问题就简单了。
初学FPGA,没啥太多经验,不过有个思路,但是没太仔细画时序图,而且没用过DSP,所以下面说的能不能用需要你自己试试:
1。做个判断count值变化的程序,拉个标志信号出来,想用他的上升还是下降沿自己定。举个例子:时钟下降沿判断,count变化,flag拉高,不变,flag=0,这样在count变化时,会得到一个时钟周期的flag高电平信号;
2. 时钟上升沿驱动,在flag有效时count_reg更新为count,在flag无效时,用count_reg计数。这样应该能做到count随时更新,更新后计数控制LED。
其实就是想办法加个中间层,承上启下...
设置一个读取计数器,用来缓存读取映射地址的数值,再设置一个当前计数周期变量,还有一个计数变量进行周期加减运算,周期性读取映射地址的数值存到缓存变量,可以设置当计数器减运算到0时,进行比较当前计数周期跟缓存变量是否一致,来重新装载周期计数变量。
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵