Verilog HDL建模(五)

好久木有更新了...囧...

其实一直是在看建模那本书,学完了基础后面看的也比较快了,说实话建模应该是基础,后期的时序因该更认真的看。

下面记录一下FIFO这个神奇而有用的玩意儿。

FIFO可以看作是一个缓冲区域,亦可以称作双口RAM,FIFO就是First input First output的意思。我们把所有的信息缓存到FIFO里,每当下一层的模块完成内部工作以后,可以直接从FIFO里读取信息,用不着缠着上一个模块,等待反馈给予命令然后下达新的操作指令。

(1)首先上一层模块往FIFO里写入大量的操作信息,然后上一层模块可以执行其他的操作,而不必在乎“反馈信息”

(2)当FIFO里存在信息,控制模块会从FIFO里读取信息,信息被过滤后,会转换成命令,故启动模块开始工作。

(3)功能模块会很快工作,在工作完成后会反馈信息给控制模块——我完成了。

(4)当控制模块接受到功能模块的反馈信息后,会从FIFO里读取信息,重复上述工作,直到FIFO里的信息全部读取完毕。

下面以SOS码为例:

beep_control.v

module beep_control(input clk,input rstn,input [7:0]FIFO_Read_Data,

input Empty_Sig,output Read_Req_Sig,input Function_Done_Sig,output [1:0]Function_Start_Sig);

reg [3:0]i;

reg [1:0]rCmd;

reg isRead;

reg [1:0]isStart;                                          //[1]S; [0]O

always @ (posedge clk or negedge rstn)

    if(!rstn) begin

                i <= 4'd0;

                rCmd <= 2'd0;

                isRead <= 1'b0;

               isStart <= 2'b0;

               end

    else

           case(i)

                  4'd0:

                         if(!Empty_Sig)i <= i + 4'd1;

                   4'd1:

                         begin isRead <= 1'b1;i <= i + 1'b1 end;

                    4'd2:

                         begin isRead <= 1'b0;i <= i + 1'd1 end;

                    4'd3:

                         begin if(FIFO_Read_Data == 8'h1B) rCmd <= 2'b10;

                                  else if(FIFO_Read_Data == 8'h44) rCmd <= 2'b01;

                                  else rCmd <= 2'b00;

                          end

                          i <= i + 4'b1;

                     4'd4:

                        if(rCmd == 2'b00) i<=4'b0;

                        else i <= i + 4b'1;

                      4'd5:

                        if(Function_Done_Sig)begin rCmd <= 2'b00;isStart <= 2'b00;i <= 4'b0;end

                        else isStart <= rCmd;

         endcase

assign Read_Seq_Sig=isRead;

assign Function_Start_Sig=isStart;

endmodule

这是一个FIFO读的实例操作。通过isRead=Read_Seq_Sig命令FIFO_module.v来对FIFO模块进行读操作,脱离了控制模块,不必再等着控制模块给命令。

是一个很有用的模型。

                                                

                  

原文地址:https://www.cnblogs.com/jast/p/2883421.html