CCIE
发表于 2010-6-28 11:45:52
bucuo 不错很好唉<br>
9楼的意思就是说,那个使能信号随着流水线一块,当第三级数据有效的时候也恰好使能<br>
嗯,是个办法
CHA
发表于 2010-6-28 12:37:25
那个使能信号从哪儿进从哪儿出,需要经过什么逻辑?
inter
发表于 2010-6-28 14:29:00
应该是这样吧 <br>
<br>
你有三级流水线,那么就设三个势能信号。en1,en2,en3<br>
<br>
开始的时候 三个都复位为0<br>
当第一级流水线开始工作时,在这个时钟有效来了以后沿置en1=1,<br>
<br>
en2是en1的一个周期的延迟,en3是en2的一个周期的延迟,(用寄存器就可以实现)<br>
<br>
这样当en3=1时,同一时刻输出的数据就为有效数据了<br>
<br>
<br>
个人意见<br>
<br>
[ 本帖最后由 crazydreamer 于 2006-9-21 15:48 编辑 ]
usd
发表于 2010-6-28 15:41:42
根据大家的意见,这样可以实现吗:<br>
若有n级流水线,则设一个n位的移位寄存器。若使能信号高有效,则最低位为1,其余位均为0。每一位对应于各级的使能信号,这样,移位寄存器在时钟控制下每移一位就使下一级有效。流水线关闭时也可以实现逐级关闭使能信号。<br>
还请业内专家做鉴定。不知道 真正工程中是如何实现流水线的
ICE
发表于 2010-6-28 16:35:42
有必要非得把前面几个无效的状态进行处理吗?<br>
加了使能信号,在无效的时候,还是啥也不做,无效啊<br>
还不如不加,在无效的时候,理都不用理,有效了再做处理<br>
加不加有没有区别啊?<br>
有没有实际做过的,给点经验吧
inter
发表于 2010-6-28 17:32:19
同问ing
usd
发表于 2010-6-28 18:52:36
原帖由 LOONG 于 2006-9-21 17:13 发表<br>
加不加有没有区别啊?<br>
我觉得如果任意时刻器件都有效的话信号的抖动就会被认为是输入,所以应该加上使能。<br>
不过确实应该请有经验的人出来讲话。
ngtim
发表于 2010-6-28 19:11:01
没有必要用移位寄存器,而且名字都一样,很容易弄错的,就用一比特的reg信号好了。<br>
input enable;<br>
reg enable_dly1; //delay1<br>
reg enable_dly2;<br>
always@(posedge clk or negedge rst)begin<br>
if(rst)begin<br>
enable_dly1<=1'b0;<br>
enable_dly2<=1'b0;<br>
end<br>
else begin<br>
enable_dly1<=enable;<br>
enable_dly2<=enable_dly1;<br>
end<br>
end<br>
<br>
整个流水就用这三个使能信号分别控制这三级加法。如果怕输出无效数据,可以判断使能信号无效的情况使给你的加法器清零,或者赋成你期望的值。也完全可以不用理。 下一级模块要判断你的数据是否有效也使看你随有效数据传出去的那个使能信号吧?使能信号无效它也不会用你的那个数据啊!<br>
虽然处理第一个数据时会有两时钟延时,完全可以不理会嘛。加了寄存器路径延时小了,就能跑得更快,岂不更好嘛!个人见解!
interi
发表于 2010-6-28 20:45:36
嗯<br>
有道理<br>
领教了
longtime
发表于 2010-6-28 20:48:39
对,有道理,可以利用非阻塞赋值来解决依次使能的问题。<br>
长见识中......