zoukankan      html  css  js  c++  java
  • 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模块进行读操作,脱离了控制模块,不必再等着控制模块给命令。

    是一个很有用的模型。

                                                    

                      

  • 相关阅读:
    Centos 配置网易YUM源
    JDK 变量配置
    redis如何解决key冲突?
    大数据技术(1)流式计算与Storm
    20151211小问题
    返回顶部
    20151210小问题2
    20151210小问题
    20151209小问题
    前端程序员的自我修养
  • 原文地址:https://www.cnblogs.com/jast/p/2883421.html
Copyright © 2011-2022 走看看