搜索
bottom↓
回复: 17

大家来看看如何描述这个时序……

[复制链接]

出0入0汤圆

发表于 2009-12-29 10:00:28 | 显示全部楼层 |阅读模式
如题,如图:

如何描述一下这个时序? (原文件名:123.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-12-29 13:29:07 | 显示全部楼层
补充说明:Sclk和 SDFO都是输入信号,通过这个时序来输出SDIN,

看了好长时间了,不知道如何下手,关键是需要看怎么能够通过两个信号来控制下面信号的输出。大家给点建议、思路啊。

出0入4汤圆

发表于 2009-12-29 13:32:59 | 显示全部楼层
写一个状态机即可: SCLK作为时钟,SDFO作为触发信号

出0入0汤圆

发表于 2009-12-30 11:28:26 | 显示全部楼层
回复【2楼】qinxg
-----------------------------------------------------------------------


上个程序来看看啊

出0入0汤圆

 楼主| 发表于 2009-12-30 11:34:29 | 显示全部楼层
回复【2楼】qinxg
-----------------------------------------------------------------------
请问这个状态机怎么写啊,写哪种形式的,能不能提示的再具体一点啊?

出0入0汤圆

发表于 2009-12-30 11:39:47 | 显示全部楼层
两个过程:一个当时钟为高时来了SDFO的上跳做个触发器输出Q=1,第二过程:有了Q=1后,当SDOF=0,在时钟SCLK下沿更新SDIN数据

出0入0汤圆

 楼主| 发表于 2009-12-30 15:16:31 | 显示全部楼层
回复【5楼】888888888888
-----------------------------------------------------------------------

还是不太理解,那什么时候操作Q=0啊,能说清楚点么?谢谢……

出0入0汤圆

发表于 2010-1-2 13:04:21 | 显示全部楼层
FPGA刚入手3天.不知道这个对不对呵.仿真波形如下:
module gibson(sclk,sdfo,sdin);
input sclk;
input sdfo;
output [7:0]sdin;
reg q=0;
reg sdfo_reg=1;
reg [7:0]din_reg;
always @(posedge sclk)
begin
if(sdfo)q<=1;
else sdfo_reg<=0;
end
always @(negedge sclk)
begin
if(q&&(!sdfo_reg))
din_reg<=din_reg+1;
end
assign sdin=din_reg;
endmodule

(原文件名:未命名.jpg)

出0入0汤圆

 楼主| 发表于 2010-1-4 13:49:05 | 显示全部楼层
回复【7楼】gibson08
-----------------------------------------------------------------------
个人认为这个程序的关键点在于如下图一所示,而你的这个程序里面在此时的波形如图二所示,可能有些不对……欢迎大家批评指正。

图一 (原文件名:图1.jpg)

图二 (原文件名:图2.jpg)

出0入0汤圆

 楼主| 发表于 2010-1-7 10:24:31 | 显示全部楼层
怎么没人回答啊,希望大家帮帮忙了,说对说错不要紧,交流一下啊。

出0入0汤圆

发表于 2010-1-23 19:26:40 | 显示全部楼层
代码我写完了。你自己看看吧。
不是一开SCLK的下降沿,这个数据依靠SDFO的低电平的。
两个时钟。
对一个发现SDFO为高电平,设定标志位。
然后在第二个时钟,讲标志位SDFO低位共与得出结果。
其实就是检测SDFO边缘信号。

`timescale 1ns/1ns

module SDIN(sclk,data,sdfo,sdin);
   
parameter n=5;
input sclk;
input sdfo;
input[n:0] data;
output[n:0] sdin;

reg[n:0] sdin_ready;
reg ready_flag;
reg[n:0] sdin;


always @(posedge sclk)
begin
  if(sdfo) begin
     sdin_ready[n:0] <= data[n:0];
         ready_flag<=1'b1;
        end
  else sdin_ready[n:0] <= 0;
end

always @(posedge sclk)
begin
  if(ready_flag&&(!sdfo)) begin
     ready_flag<=1'b0;
         sdin<=sdin_ready[n:0];
  end
  end
  endmodule

出0入0汤圆

发表于 2010-1-23 19:27:23 | 显示全部楼层
测试代码
module SDIN_TOP;

parameter n=5;
reg in_sclk;
reg in_sdfo;
reg[n:0] in_data;
wire[n:0] out_sdin;

SDIN sdn(.sclk(in_sclk),
        .data(in_data),
        .sdfo(in_sdfo),
        .sdin(out_sdin));
        
        
initial
begin

     in_sclk=0;
     in_sdfo=0;
     in_data[n:0] =5'b0_0000;
end

  initial
    begin
    #12 in_sdfo=1;
    #25 in_sdfo=0;
end

always
begin
    #10 in_sclk=~in_sclk;
    if(in_data[n:0]==5'b1_1111) in_data[n:0]=5'b0_0000;
    else in_data[n:0]=in_data[n:0]+1'b1;
end


endmodule

出0入0汤圆

发表于 2010-1-23 19:28:36 | 显示全部楼层

(原文件名:2010-01-23_192936.png)

出0入0汤圆

 楼主| 发表于 2010-1-25 16:37:17 | 显示全部楼层
回复【10楼】sadlife1000
-----------------------------------------------------------------------

感谢楼上的回答,但是这个地方有个疑问,在sdfo为低电平之后,并不是只送一个数据,而是在每个sclk的上升沿都要输送一个数据。请问这个怎么解决……

出0入0汤圆

发表于 2010-1-25 21:34:10 | 显示全部楼层
回复【13楼】catking
-----------------------------------------------------------------------

`timescale 1ns/1ns

module SDIN(sclk,data,sdfo,sdin);
   
parameter n=5;
input sclk;
input sdfo;
input[n:0] data;
output[n:0] sdin;

reg[n:0] sdin_ready;
reg ready_flag;
reg[n:0] sdin;
reg continue_flag;


always @(posedge sclk)
begin
  if(sdfo|continue_flag) begin
     sdin_ready[n:0] <= data[n:0];
         ready_flag<=1'b1;
        end
  else sdin_ready[n:0] <= 0;
end

always @(posedge sclk)
begin
  if((ready_flag&&(!sdfo))||continue_flag) begin
     ready_flag<=1'b0;
         continue_flag<=1'b1;
         sdin<=sdin_ready[n:0];
  end
  end
  
  
  endmodule

出0入0汤圆

发表于 2010-1-25 21:34:43 | 显示全部楼层

(原文件名:未命名.jpg)

出0入0汤圆

 楼主| 发表于 2010-1-26 14:08:12 | 显示全部楼层
回复【15楼】sadlife1000
-----------------------------------------------------------------------
感谢楼上的回答,非常感谢……

出0入0汤圆

 楼主| 发表于 2010-1-27 10:24:05 | 显示全部楼层
回复【15楼】sadlife1000
-----------------------------------------------------------------------
刚刚验证了一下你的程序,综合出现错误,仔细一看原来你在两个always中对ready_flag进行了赋值,这样会产生竞争冒险的啊,请问能不能有个更好的解决办法?谢谢了……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-16 02:26

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

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