搜索
bottom↓
回复: 10

发一个自己写的FPGA SPI从机,跨时钟域,SPI跑到18M没发现问题

[复制链接]

出0入0汤圆

发表于 2015-7-21 17:32:03 | 显示全部楼层 |阅读模式
模块比较简单,直接粘代码了

module spi_module(
        CLK,
        SSEL, SCK, MOSI, MISO,
        byte_received, byte_data_received, byte_data_sent
);

input CLK;

// SPI Interface
input SSEL;
input SCK;
input MOSI;

output MISO;
// FPGA Interface
input [7:0] byte_data_sent;
output byte_received;
output [7:0] byte_data_received;

reg [3:0] bitcnt;

reg [7:0] byte_data_received_w;
always @(posedge SCK or posedge SSEL)
begin
        if(SSEL)begin
                bitcnt <= 4'b0000;
        end
        else begin
                bitcnt <= bitcnt + 4'b0001;
                byte_data_received_w <= {byte_data_received_w[6:0], MOSI};
        end
end

wire byte_received_w = (~SSEL) && (bitcnt == 4'b1000);

reg [7:0] byte_data_sentr;
always @(negedge SCK or posedge SSEL)
begin
        if(SSEL)
                byte_data_sentr <= byte_data_sent;
        else begin
                if(bitcnt == 3'b000)
                        byte_data_sentr <= 8'h00;
                else
                        byte_data_sentr <= {byte_data_sentr[6:0],1'b0};
        end
end
assign MISO = byte_data_sentr[7];

reg [2:0]byte_received_r; always @(posedge CLK) byte_received_r <= {byte_received_r[1:0],byte_received_w};
assign byte_received = (byte_received_r[2:1]==2'b01);

reg [7:0] byte_data_received_r[1:0];
always @(posedge CLK)
begin
        byte_data_received_r[0] <= byte_data_received_w;
        byte_data_received_r[1] <= byte_data_received_r[0];
end
assign byte_data_received = byte_data_received_r[1];

endmodule

出0入0汤圆

发表于 2015-7-21 18:05:01 | 显示全部楼层
速度不错,报下在什么器件上实现的呗

出0入0汤圆

 楼主| 发表于 2015-7-21 19:00:12 | 显示全部楼层
mfkiwl 发表于 2015-7-21 18:05
速度不错,报下在什么器件上实现的呗

这个倒是跟器件没太大关系,因为是直接取自SPI的SCK来采集数据的,非同步方式。
用的EP4CE6

出0入0汤圆

发表于 2015-7-21 20:08:17 | 显示全部楼层
有点牛逼,可惜Verilog看不懂,只会VHDL.

出0入0汤圆

 楼主| 发表于 2015-7-21 20:09:43 | 显示全部楼层
lans0625 发表于 2015-7-21 20:08
有点牛逼,可惜Verilog看不懂,只会VHDL.

会了Verlog以后,在学校学的VHDL基本忘干净了。

出0入0汤圆

发表于 2015-7-21 20:13:19 | 显示全部楼层
hantnt 发表于 2015-7-21 20:09
会了Verlog以后,在学校学的VHDL基本忘干净了。

我是先学的verilog后学的vhdl,最后前者忘得一干二净。

出0入0汤圆

发表于 2015-7-21 22:11:32 | 显示全部楼层
FPGA当丛机
最大的问题就是 SCK 进入FPGA后,进入全局BUFFER,这段延迟,再加上
FPGA的数据输出在Output Buffer上的延时
这2个延迟加起来有十几ns。
这2个延时不解决,一般FPGA当丛机,SPI时钟最好不要超过30M。

出0入0汤圆

 楼主| 发表于 2015-7-21 23:11:34 | 显示全部楼层
全频阻塞干扰 发表于 2015-7-21 22:11
FPGA当丛机
最大的问题就是 SCK 进入FPGA后,进入全局BUFFER,这段延迟,再加上
FPGA的数据输出在Output Bu ...

说的有道理。

出0入0汤圆

发表于 2015-7-22 22:11:31 | 显示全部楼层
支持原创

出0入0汤圆

发表于 2015-7-29 17:31:24 | 显示全部楼层
全频阻塞干扰 发表于 2015-7-21 22:11
FPGA当丛机
最大的问题就是 SCK 进入FPGA后,进入全局BUFFER,这段延迟,再加上
FPGA的数据输出在Output Bu ...

出0入0汤圆

发表于 2021-10-9 05:47:08 来自手机 | 显示全部楼层
跨时钟域了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 08:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表