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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3385|回复: 7

[求助] 请问FPGA中复位的问题

[复制链接]
发表于 2011-1-6 11:57:21 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 congfeiyu 于 2011-1-6 12:47 编辑

各位好,上回问到我想用dsp读取我FPGA中八个fifo中的数据,现在我需要在FPGA中产生八个FIFO的读使能信号,用的是地址译码,我把地址ADDR放在了敏感列表中,但是出现了两个问题1:当我的地址不是八个FIFO中任何一个的地址或者是高阻时,我用default语句将八个使能信号全设为低电平,但是仿真出来后却是不定值: 11.jpg

2:我想设一个复位信号,复位后所有的读使能都为低电平,但是由于我已经把ADDR放在了敏感列表中,如果把posedge RST也放进去会报错,因为不能同时检测跳变沿和电平,于是我把RST信号也改成了电平检测,即always@(ADDR or IS or RST),但是使能信号好像没有被复位: 22.jpg
是什么原因呢?是不是复位信号只能用跳变沿检测才会有效?那怎样才能把地址总线的变化和复位信号的变化放在一个always里呢?谢谢!
下面是我的源程序,小弟不才,程序可能不规范请拍砖!parameter FIFO1=8'h00,
FIFO2=8'h01,
FIFO3=8'h02,
FIFO4=8'h03,
FIFO5=8'h04,
FIFO6=8'h05,
FIFO7=8'h06,
FIFO8=8'h07;

always@(ADDR or IS or RST)
begin
if(RST)
begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
    end
else
if(~IS)
case(ADDR)
FIFO1:begin
FIFO1_EN=1'b1;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
  end

FIFO2:begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b1;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
  end
    FIFO3:begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b1;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
end

    FIFO4:begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b1;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
  end
FIFO5:begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b1;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
  end
FIFO6:begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b1;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
  end

    FIFO7:begin

FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b1;
FIFO8_EN=1'b0;
  end

    FIFO8:begin

FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b1;
  end

default:begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
  end
endcase
else
begin
FIFO1_EN=1'b0;
FIFO2_EN=1'b0;
FIFO3_EN=1'b0;
FIFO4_EN=1'b0;
FIFO5_EN=1'b0;
FIFO6_EN=1'b0;
FIFO7_EN=1'b0;
FIFO8_EN=1'b0;
  end
end
发表于 2011-1-6 12:37:38 | 显示全部楼层
case不识别x或者z
 楼主| 发表于 2011-1-6 12:49:23 | 显示全部楼层
回复 2# shaweikang1984

多谢版主 那我这种情况该怎么办呢?
发表于 2011-1-6 12:54:48 | 显示全部楼层
把你的addr上拉或者下拉
 楼主| 发表于 2011-1-6 13:09:37 | 显示全部楼层
回复 4# shaweikang1984


   啊偶..谢谢 好主意 可是我的硬件已经做好了,悲剧了,没有上拉或者下拉电阻,我再来想办法换个算法试试 呵呵
发表于 2011-1-7 15:57:11 | 显示全部楼层
不做选择的时候直接赋个无效值不就得了
发表于 2011-1-7 16:45:55 | 显示全部楼层
你的程序里的ADDR值都还是Z,怎么可能能做判断呢。。。
发表于 2011-1-11 13:22:30 | 显示全部楼层
楼主似乎没有理解verilog硬件语义啊?

不要把verilog当成软件代码那样去写!

always@(posedge i_clk or negedge RST)
    if(!RST)
         xxxxxxxxx
   else if(~IS)
       case(ADDR)
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-23 00:34 , Processed in 0.044569 second(s), 10 queries , Gzip On, Redis On.

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