精益中,FIFO lane的公积金贷款上限计算(max)计算

同步FIFO设计与实现
同步FIFO设计
1.功能定义:
&用16*8 RAM实现一个同步先进先出(FIFO)队列设计。由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出。写入和读出的操作由时钟的上升沿触发。当FIFO的数据满和空的时候分别设置相应的高电平加以指示。
2.顶层信号定义:
全局复位(低有效)
占空比:50%
低有效写使能
低有效读使能
Data_in[7:0]
数据输入端
Data_out[7:0]
数据输出端
空指示信号
为高时表示fifo空
满指示信号
为高时表示fifo满
3.顶层模块划分及功能实现
该同步fifo可划分为如下四个模块,如图1所示:
①存储器模块(RAM)&&&
——用于存放及输出数据;
②读地址模块(rd_addr)&
——用于读地址的产生;
③写地址模块(wr_addr)——用于写地址的产生
④标志模块(flag_gen) ---- 用于产生FIFO当前空满状态。
&&&&&&&&&&&&&&&
图1 同步FIFO的模块划分
本设计中的FIFO采用采用16*8双口RAM,以循环读写的方式实现;
根据rd_addr_gen模块产生的读地址,在读使能(rd_en)为高电平的时候,将RAM中rd_addr[3:0]地址中的对应单元的数据在时钟上升沿到来的时候,读出到data_out[7:0]中。
根据wr_addr_gen产生的写地址和在写使能(wr_en)为高电平的时候,将输入数据(data_in[7:0])
在时钟上升沿到来的时候,写入wr_addr[3:0]地址对应的单元。
一下是ram程序:
module ram(clk,wr_en,rd_en,data_in,wr_addr,rd_addr,data_out);
input[7:0]data_
input[3:0]wr_
input[3:0]rd_
output[7:0]data_
reg [7:0]data_
parameter max_count=5'b10000;
reg [7:0]fifo[0:max_count];
always @ (posedge clk )
& if(rd_en)
data_out&=fifo[rd_addr];
always @ (posedge clk )
& if(wr_en)
fifo[wr_addr]&=data_
& 生成模块:
&&&&&&&&&&&&&&&
2)wr_addr_gen:
该模块用于产生FIFO写数据时所用的地址。由于16个RAM单元可以用4位地址线寻址。本模块用4位计数器(wr_addr[3:0])实现写地址的产生。
在复位时(rst=0),写地址值为0。
如果FIFO未满(~full)且有写使能(wr_en)有效,则wr_addr[3:0]加1;否则不变。
wr_addr_gen(clk,rst,full,wr_en,wr_addr);
input clk,
output [3:0]wr_
reg [3:0]wr_
always @ (posedge clk or negedge rst)
& if(!rst)
wr_addr&=4'b0000;
if(full==0&&wr_en==1)
wr_addr&=wr_addr+1;
wr_addr&=4'b0000;
&&&&&&&&&&&&&&&&&&&&&&&
3)rd_addr_gen:
该模块用于产生FIFO读数据时所用的地址。由于16个RAM单元可以用4位地址线寻址。本模块用4位计数器(rd_addr[3:0])实现读地址的产生。
在复位时(rst=0),读地址值为0。
如果FIFO未空(~empty)且有读使能(rd_en)有效,则rd_addr[3:0]加1;否则不变。
module rd_addr_gen(clk,rst,emptyp,rd_en,rd_addr);
input clk,
output [3:0]rd_
reg [3:0]rd_
always @ (posedge clk or negedge rst)
& if(!rst)
rd_addr&=4'b0000;
if(emptyp==0&&rd_en==1)
rd_addr&=rd_addr+1;
rd_addr&=4'b0000;
endmodule&
4) flag_gen模块
flag_gen模块产生FIFO空满标志。本模块设计并不用读写地址判定FIFO是否空满。设计一个计数器,该计数器(pt_cnt)用于指示当前周期中FIFO中数据的个数。由于FIFO中最多只有16个数据,因此采用5位计数器来指示FIFO中数据个数。具体计算如下:
复位的时候,pt_cnt=0;
如果wr_en和rd_en同时有效的时候,pt_cnt不加也不减;表示同时对FIFO进行读写操作的时候,FIFO中的数据个数不变。
如果wr_en有效且full=0,则pt_cont+1;表示写操作且FIFO未满时候,FIFO中的数据个数增加了1;
如果rd_en有效且empty=0,则pt_cont-1; 表示读操作且FIFO未满时候,FIFO中的数据个数减少了1;
如果pt_cnt=0的时候,表示FIFO空,需要设置empty=1;如果pt_cnt=16的时候,表示FIFO现在已经满,需要设置full=1。
module flag_gen(clk,rst,full,emptyp,wr_en,rd_en);
input clk,
output full,
parameter max_count=5'b01111;
always @ (posedge clk or negedge rst)
& if(!rst)
&& count&=0;
&& case({wr_en,rd_en})
2'b00:count&=
if(count!==5'b00000)
count&=count-1;
if(count!==
max_count)&&&
count&=count+1;
2'b11:count&=
&& endcase
always @(count)
&& if(count==5'b00000)
emptyp&=1;
emptyp&=0;
always @(count)
&& if(count== max_count)
&& full&=1;
full&=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
最后的顶层模块如下所示:
仿真波形:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。谈谈精益实施过程中的一些感悟(4)--项目发表及移交
 项目的TIP1阶段成功完成了。几个关键的指标也成功达到了。比如productivity
提升了27%,WIP减少了36%,生产线建立了FIFO
lane,等。现在到了需要向管理层汇报的时候。在这之前作了很多的项目,也发表了很多的项目,那么怎么才能show出一个出色的结果尤为重要,因为你需要在短短的1个半小时里将你3个月中的成果及活动报告出来。我认为:
&首先:整个报告的逻辑性要强。我们要将我们的如何分析,如何改进,改进结果,及如何保持改进结果等等各个方面都考虑周到。
&其次:目视化要强。既要有充分的数据支持也要有大量的图片展示,让管理层能购充分理解。因此我们要把汇报的对象作为一个对生产线完全一无所知的人来准备报告。
&接着:数据的严谨及关联性。我们展示的数据需要时经过推敲的,并且相互影响的数据要有符合逻辑的影响。
&最后:真个报告要完整,汇报者需要生动的将真个有血有肉的故事讲出来。
&另外:自圆其说很重要,即使你的数据可能有问题!
&其实,难免我们会受到一些challenge,这就要求我们需要有很快的反应,当然如果真是我们需要改进的地方,我们不妨大方承认。否则领导一点错都挑不出来的话也不太好吧!?
&新的项目3月又要来了,让我们重新起航吧!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 变上限积分怎么计算 的文章

 

随机推荐