在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5356|回复: 17

磕头求助关于Verilog HDL的一段小程序

[复制链接]
发表于 2009-10-28 20:39:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在做毕业设计,其中一部分需要用到FPGA采集数据,用ARM来隔一段时间通过SPI采集一次数据,因此编写了一个简单的仿SPI从机的小程序,因为新手,遇到了折腾一个月也没解决的问题,试用过状态机的方法,移位寄存器的方法,还有目前的类似于数组指针的方法,统统出现一个问题,就是仿真没有问题,但是下载到片内就不正常运行。最近两天用Technology Map Viewer(我用Quartus II 9.0)看,发现有好几个寄存器被优化掉了,而且本来应该在下降沿发生计数变化的,居然在上升沿也会跳变,总之实际结果与预想结果相差太远,实在是没有办法了,身边没有人教,纯粹自学,由于关系到毕业设计,所以还请各位大哥大姐大叔大婶大爷大妈,行行好,帮我看看究竟怎么回事,该怎么解决这个问题啊,俺给您磕头了。
以下为源程序:
module spi(SCK,MOSI,MISO,SSEL,RevData);
input SCK;
input MOSI;
input SSEL;
output reg MISO;
wire temp;
output [7:0]RevData;
reg [7:0]Data;
wire [7:0] ParaData;

assign ParaData=8'h72;
spimod myspi(.SCK(SCK),.SSEL(SSEL),.MISO(temp),.MOSI(MOSI),
             .ParaData(ParaData),.RevData(RevData));
endmodule

///////////////////////////////////////////////////////
module spimod(SCK,SSEL,MISO,MOSI,ParaData,RevData);
input SCK;
input SSEL;
output reg MISO;
input MOSI;
input [7:0] ParaData;
reg [3:0] ShiftCount;
reg [15:0] ShiftReg;
wire ShiftClock;
output reg [7:0] RevData;
assign ShiftClock=SCK | SSEL;
always @(negedge ShiftClock)
begin
  if(ShiftCount>=4'h8)
  ShiftCount<=4'b0000;
  else
  ShiftCount<=ShiftCount+1'b1;
end
always @(posedge SCK)
begin
  MISO<=ShiftReg[16-ShiftCount];
end
always @(negedge SSEL)
begin
  ShiftReg[15:8]<=ParaData;
end
always @(negedge SCK)
begin
  ShiftReg[7:1]<=ShiftReg[6:0];
  ShiftReg[0]<=MOSI;
end
always @(posedge SSEL)
begin
  RevData<=ShiftReg[7:0];
end
endmodule

再磕三个响头了……谢谢
发表于 2009-10-28 22:17:27 | 显示全部楼层
看得出来,这是个对V不熟的人写的
发表于 2009-10-28 22:18:52 | 显示全部楼层
1# benselang


不要屈膝  


没有输入输出时序图,别人也忙不了你

MISO<=ShiftReg[16-ShiftCount]; // 这么设计不行
SSEL 应该是一个高低8位的选择,不要作为时钟
发表于 2009-10-28 22:19:16 | 显示全部楼层
我有一个建议,就是最好只有一个时钟,单时钟设计
发表于 2009-10-28 22:39:47 | 显示全部楼层
这种沿触发的 最好就一个时钟信号 你这里沿触发信号太多
发表于 2009-10-28 22:41:35 | 显示全部楼层
建议你引入一个外部时钟信号 比如clock 用clock来采样其它信号 比如SCK SSEL等
发表于 2009-10-29 02:07:05 | 显示全部楼层
楼主 仔细弄明白啥是同步设计才行
 楼主| 发表于 2009-10-29 07:52:02 | 显示全部楼层
谢谢各位,忘了发时序图了   (SPI通信时序,主机SCK高电平有效,下降沿采样,SSEL低电平有效)
                ___        ___        ___       ___        ___        ___       ___        ___
SCK _____|      |___|     |___|     |___|     |___|      |___|     |___|     |___|     |____
SSEL__                                                                                                                  ____
            |________________________________________________________|      
小弟确实是超级菜鸟,只是找了两本书自学,而且想针对毕业设计来做,所以没有深入系统学,各位大大,还请多多帮忙,实在是关系重大,可否请详细指明该怎样修改?或者可否举一小例子说明。
实在是恳求各位大大了
 楼主| 发表于 2009-10-29 07:59:42 | 显示全部楼层
另外,补充一点点,我的基本思路是在SSEL下降沿时从外部总线采集数据到ShiftReg[15:8](因为最后需要做到用当主机ARM采集16个字节的信息,所以从机FPGA连续16次从不同的寄存器读取数据)。
发表于 2009-10-29 08:34:24 | 显示全部楼层
output reg MISO;  

为什么又是output 又是reg 没看到这么写的 不过编译居然能通过哎

前段时间调过一个简单的spi  大叔我就帮你看看吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-26 05:37 , Processed in 0.035058 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表