Verilog 代码,问题出在哪,小白求助,在线等

2019-03-25 07:43发布

本帖最后由 zhaironghui 于 2015-10-22 11:26 编辑

大家好,接触 Verilog 时间不长,遇到一个问题,真心求教。谢谢
背景:想把 AD 输出的 8 位并行数据在 CPLD 中进行并串转换,并在 DSP 提供的 串行时钟 CLKR1 和 帧同步(片选)信号 FSR1 的控制下,将串行数据经 DR1 引脚输出
问题:综合能通过,但经过波形仿真,DR1 输出的数据总是不对

代码如下:
//
module spi(
         output reg clk_ad,

    //SPI_1,方向:CPLD-->DSP        
         output reg DR1,
         input FSR1,
         input CLKR1,
         
         input clk_in,
         input [7:0]data_in       //AD输入cpld的8位数据
        );
         
         reg[4:0]temp;
//add        
         reg[7:0]data_to_dsp;     //用于数据缓存
        reg[8:0]data_to_dspp;

//AD的时钟由有源晶振4分频得到,10/4=2.5M
always @(posedge clk_in) begin
         temp<=temp+1'd1;
         if(temp==1)
                 begin
                         clk_ad<=~clk_ad;
                         temp<=0;
end

         else
                         clk_ad<=clk_ad;
end

//AD输入到CPLD的数据转移到寄存器data_to_dsp中
always @(posedge clk_ad) begin
         data_to_dsp<=data_in;               
end

//CPLD到DSP的SPI实现(SPI1)
always @(negedge CLKR1) begin
         if(!FSR1)
                         begin
                                   data_to_dspp[8:0] <= {data_to_dsp[7:0],1'b0};
                                 DR1 <= data_to_dspp[8];
     end
end

endmodule
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
zhaironghui
1楼-- · 2019-03-26 04:39
coyoo 发表于 2015-10-25 09:28
"pouty7447"应该指出了问题所在,之前没有仔细看代码。
其实应该没有必要定义一个data_to_dspp,即将data ...

恩,谢谢你,从代码上看的确没有实现移位功能,实现移位功能后还要考虑你说的这几个问题
zhaironghui
2楼-- · 2019-03-26 09:55
pouty7447 发表于 2015-10-22 11:08
楼主你好,我也是FPGA的初学者,而且是自学...我说说我的一点理解吧,说错的地方请楼主和路过的大神轻拍
...

首先感谢你的解答指出了程序的问题所在,没有实现移位功能,这样改代码应该没有问题,
我程序中每个 FSR1(2.5MHz) 的低电平对应 8 个 CLKR1(40MHz =2.5 MHz*16) 的周期,(即 CLKR1 的频率为 FSR1 的 16 倍,也为 clk_ad(2.5MHz) 的 16 倍),所以这样改理论上应该是对的。
gjlkgln4534
3楼-- · 2019-03-26 12:28
 精彩回答 2  元偷偷看……
zhaironghui
4楼-- · 2019-03-26 13:07
gjlkgln4534 发表于 2015-10-27 10:46
可以参考明德扬点拨FPGA基础视频,视频里有verilog视频的讲解。

好的,谢谢

一周热门 更多>