编程自学网编程自学网编程自学网

FPGA通过spi接收数据,想在接收到某个数据的时候,把这个数据存入寄存器,然后把一个信号拉高, 这个信号被拉高之后,持续至少2ms然后自己再拉低。

问题描述:

FPGA通过spi接收数据,想在接收到某个数据的时候,把这个数据存入寄存器,然后把一个信号拉高,这个信号被拉高之后,持续至少2ms然后自己再拉低。


解决方法:

大体意思,若收到某数据,另一信号变成高电平,然后2ms之后自动降到低电平。实现:我的想法是收到这个数据后直接拉高这个信号,然后在另一个always语句中计时2ms后把这个信号再拉低。对Verilog编程不熟悉,没有考虑到同一个寄存器量如果在两个always语句中出现的话会出现竞争和冒险,ise软件综合不能通过。后来请教了大师兄后,大师兄给的方法是,spi收到数据之后把一个标志寄存器置1,然后在另一个always语句中写一个有两个状态的状态机,0状态检测这个标志寄存器,如果置1了就转入状态1。状态1中,拉高信号,计时2ms,计时到了之后拉低信号,计时归零,回到状态0,这个有状态机的always语句使用的是系统时钟比spi时钟快很多。学到一种方法。

未经允许不得转载:编程自学网 » FPGA通过spi接收数据,想在接收到某个数据的时候,把这个数据存入寄存器,然后把一个信号拉高, 这个信号被拉高之后,持续至少2ms然后自己再拉低。