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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2089|回复: 6

[原创] 想询问下这段组合逻辑综合后,为什么GPMEMRD_o和GPMEMWR_o被提前上拉了呢

[复制链接]
发表于 2013-1-9 23:39:48 | 显示全部楼层 |阅读模式

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

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

x
module ds12cr887_opt(
clk, rst, gpcs6, gpcs6_o, rd, wr, addr, data,
GPMEMRD_o,GPMEMWR_o,GPALE_o
);
//------------input-------------------------------------  
  input clk;            // 时钟信号         
  input rst;            // 复位信号
  //input cs;             // 片选信号
  input rd;             // 读信号
  input wr;             // 写信号
  input [14:1] addr;    // 地址线
input gpcs6;     
  
//------------output-------------------------------------   
output  gpcs6_o;
  output  GPMEMRD_o;        // 读信号
output  GPMEMWR_o;        // 写信号
  output  GPALE_o;          // ale信号
  
//------------bidirection--------------------------------  
  inout [15:0]data;   //
//-----------insinside use def------------
  reg  GPMEMRD_o;        // 读信号
reg  GPMEMWR_o;        // 写信号
  reg  GPALE_o;          // ale信号
  reg  gpcs6_o;      // cs
//=====================================
parameter   
  Addr_DS_ADDR  = 'h7a0,        // option set reg
  Addr_DS_RD    = 'h7b0,    // input data
  Addr_DS_WR    = 'h7c0,    // crc result reg
Addr_DS_RST  = 'h7d0;

reg addr_mark;
always @(rst or gpcs6 or  addr[14:1] or wr or rd)// or AS_CNT_H or AS_CNT_L or RW_CNT or DS_CNT)
begin
  if(!rst)
  begin
    gpcs6_o   <= 1'b1;  //CS
    GPMEMRD_o  <= 1'b1;  //DS //RD
    GPMEMWR_o  <= 1'b1;  //RW //WR
    GPALE_o   <= 1'b1;  //AS
   
    addr_mark  <= 1'b1;
  end  
  else
  begin
    if((addr == Addr_DS_ADDR) && (!gpcs6)  )
    begin
     if(addr_mark)
     begin   
        gpcs6_o   <= 1'b0;  //CS
      if((!wr))
      begin
      gpcs6_o   <= 1'b0; //CS
      GPMEMRD_o  <= 1'b1; //DS //RD
      GPMEMWR_o  <= 1'b1; //RW //WR
      GPALE_o   <= 1'b0; //AS
      addr_mark  <= 1'b0;  
     end else
     begin
      gpcs6_o   <= 1'b1; //CS
      GPMEMRD_o  <= 1'b1; //DS //RD
      GPMEMWR_o  <= 1'b1; //RW //WR
      GPALE_o   <= 1'b1; //AS
      addr_mark  <= 1'b1;
     end
     
    end
     //
     //as_mark_H  <= 1;     
    end      
    else
    if((addr == Addr_DS_RD) && (!gpcs6) && (!rd))
    begin
     GPMEMRD_o  <= 1'b0;  //DS //RD
     GPMEMWR_o  <= 1'b1;
    end   
    else
    if((addr == Addr_DS_WR) && (!gpcs6) && (!wr))
    begin
     GPMEMWR_o  <= 1'b0;  //RW //WR
     GPMEMRD_o  <= 1'b1;
    end
    else
    if((addr == Addr_DS_RST) && (!gpcs6))
    begin
     gpcs6_o   <= 1'b1;  //CS
     GPMEMRD_o  <= 1'b1;  //DS //RD
     GPMEMWR_o  <= 1'b1;  //RW //WR
     GPALE_o   <= 1'b1;  //AS
     
     addr_mark  <= 1'b1;   
    end
   end

end   
endmodule
 楼主| 发表于 2013-1-9 23:42:09 | 显示全部楼层
每次都是在GPMEMWR_o、和GPMEMRD_o拉低后大概140ns左右被拉高呢,确认不是被if((addr == Addr_DS_RST) && (!gpcs6))这段代码设置的,
 楼主| 发表于 2013-1-16 20:38:40 | 显示全部楼层
顶起来啊,
发表于 2013-1-17 12:50:26 | 显示全部楼层
不知道帮顶下
发表于 2013-1-17 17:17:42 | 显示全部楼层
你的这段组合逻辑两处使用了锁存,也就是if else分支没有写完整,一处是if(addr_mark),
另一处是if((addr == Addr_DS_ADDR) && (!gpcs6)  )的最后分支,
由于没有tb,不清楚波形图,你可以先检查这两处,看是不是你想要的电路。
 楼主| 发表于 2013-1-22 16:50:17 | 显示全部楼层
哦哦,把tb奉上,谢谢楼上啊,
`timescale 1ns/1ns
module top_tb;

reg clk;
reg rst;
reg [14:1]addr;
reg [15:0]data;
reg rd;
reg wr;
reg gpcs6;


initial   
begin
   clk=1;
   rst=1;
   rd =1;
   wr =1;
   gpcs6 =1;

   #1000
   rst=0;
   #1000
   rst=1;
   #1000//strat 7a0
   gpcs6 = 0;
         wr = 0;
         rd = 1;
         addr = 'h7a0;
         data = 16'h09;
         
         #450    //read 7b0
         gpcs6 = 0;
         wr = 1;
         rd = 0;
         addr = 'h7b0;
         #300    //reset 7d0
         gpcs6 = 0;
         wr = 0;
         rd = 1;
         addr = 'h7d0;
         data = 16'h00;
         #300
         gpcs6 = 1;
         wr= 1;
         rd= 1;
         addr = 'h000;
   end  
always #10 clk=~clk;

ds12cr887  I_UUT(
        .clk(clk),
        .rst(rst),
        .gpcs6(gpcs6),
        .gpcs6_o(gpcs6_o),
        .rd(rd),
        .wr(wr),
        .addr(addr),
        .data(data),
        .GPMEMRD_o(GPMEMRD_o),
        .GPMEMWR_o(GPMEMWR_o),
        .GPALE_o(GPALE)
);


endmodule
发表于 2013-1-24 21:24:04 | 显示全部楼层
太长了 没时间看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-12 04:34 , Processed in 0.062130 second(s), 12 queries , Gzip On, Redis On.

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