Verilog HDL高级数字设计 从零学习(一)

Verilog HDL高级数字设计 从零学习(一)

🔈声明:
🔑未经作者允许,禁止转载
🚩推荐一个IC、FPGA新手入门的好网站:👉快 点 击 进 入 学 习 吧👈



标题由于年初刚决定转做FPGA开发,虽然开发板的很多例程都做过,但感觉做的都是接口和一些简单的协议,最近真的开始自己设计时才发现无从下手,还是基础太薄弱,所以决定从头学习一遍Verilog HDL高级数字设计这本书,并且将其中的设计,自行通过Verilog实现一遍。

后续也会记录完成的一些自认为重要的FPGA设计。

书的前两章是数电基础,就不赘述了,从第三章开始记录学习过程。

3.4 时序机设计

建立时间

时序约束是指输入信号在时钟触发沿前的适当时间内保持稳定,以此可以确定通过电路中最长的路径的时延上限,限制数据到达的最迟时间。

保持时间

是指信号在时钟触发沿后的适当时间内保持稳定,限制前一周期数据改变的最短时间。

3.5 状态转移图

状态机定义

根据在时钟到来之前的状态和当前的输入值,在时钟的有效沿处,实现同步时序机的STG表示的状态转移。

对一个同步时序机给定的状态转移图,设计任务是确定下一状态和输出逻辑。
设计需要根据当前状态和外部的输入信号,得到作为触发器的输入逻辑信号
,该逻辑电路是组合逻辑电路。(也就是说,描述次态 和 输出逻辑 是组合逻辑电路)

STG每次状态的的转移必须唯一,并且整个次态控制条件要包含全部条件。

利用D触发器实现FSM的步骤

1) 构建状态机的STG
2) 消去等价状态 (此处指弧线指向同一次态的情况,在BCD转余3码这个例子中次态即为下一位的值)
3) 选取状态码
4) 对状态编码
5) 求解描述D触发器的输入的布尔方程
6) 利用卡诺图化简布尔方程

  • 接下来就是有限状态机的设计分析了,以BCD到余3码的串行转换为例。

余3码是对9的自补码,即 0的余3码为0011.各位取反后为1100,正好是9的余3码。

用Mealy型FSM实现的BCD码到余3码串行转换器
一开始看书的时候一直没懂状态为什么是这样设置的,看了好久终于明白了。
这个例子中的现态为已串行输入的BCD码,而次态是下一位的值,输出逻辑是本次要输出的值,所以每一层只有0和1两种状态。

  • 下面是我用Verilog写的BCD码转余3码的串行转换器(仅考虑4bit),可能有考虑不周全的情况。
  • 用二段状态机来完成,状态编码方式没有特别设定,增加了一个转换器的使能端,以此保证只有4bit的转换
//
// Create Date: 2020/05/14 15:42:31
// Design Name: wang
// Module Name: bcd_to_3
//

//串行输入的BCD码低位先进        串行输入的余3码  低位先出

module bcd_to_3(
input clk,
input rst_n,
input data_in,
input en, 

output reg data_out
    );

parameter   idle=   3'b000;
parameter   S_0 =   3'b001;
parameter   S_1 =   3'b010;
parameter   S_2 =   3'b011;
parameter   S_3 =   3'b100;
parameter   S_4 =   3'b101;
parameter   S_5 =   3'b110;
parameter   S_6 =   3'b111;

    
reg [2:0]cur_state,next_state;


//两段式状态机 其中一个always模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出;
//状态转移描述
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)  cur_state <= idle;
    else        cur_state <= next_state;
end

always@(*)begin
    if(!en) begin
        next_state = idle;
        data_out = 1'b0;
    end
    
    else begin
    case(cur_state)
        idle:   begin
            next_state = en ? S_0 : idle;
            data_out   = 4'd0; 
        end
        
        S_0:    begin
            next_state  = data_in ? S_2 : S_1;
            data_out    = ~data_in;         
        end
        
        S_1:    begin
            next_state  = data_in ? S_4 : S_3;
            data_out    = ~data_in;
        end
        
        S_2:    begin
            next_state  = S_4;
            data_out    = data_in;
        end
        
        S_3:    begin
            next_state  = S_5;
            data_out    = data_in;
        end
    
        S_4:    begin
            next_state  = data_in ? S_6 : S_5;
            data_out    = ~data_in;
        end
        
        S_5:    begin
            next_state  = idle;
            data_out    = data_in;
        end
        
        S_6:    begin
            next_state  = idle;
            data_out    = ~data_in;
        end
        
        default: begin
            next_state  = idle;
            data_out    = 1'b0;  
        end
    endcase
end
end 
    
endmodule
  • 下面是以BCD码0111,转换余3码1010的仿真,低位先进

在这里插入图片描述




Verilog HDL高级数字设计是一本关于使用Verilog硬件描述语言进行高级数字设计的书籍。它提供了一种方法来描述数字电路的行为和结构,以及用Verilog语言编写、仿真和验证这些电路的技巧。这本书可以帮助读者深入了解数字设计的理论和实践,并通过实例和案例研究来加深对Verilog语言和数字设计的理解和应用。 通过学习Verilog HDL高级数字设计,您可以掌握时序机设计和状态转移图的应用。时序机设计主要是通过使用D触发器实现有限状态机(FSM),它包括了设计步骤和状态转移图的利用。这些技术对于FPGA开发和数字电路设计非常重要,可以帮助您理解和实现复杂的数字逻辑电路。 如果您刚开始学习FPGA开发,学习Verilog HDL高级数字设计是一个很好的选择。这本书提供了详细的指导和实例,可以帮助您建立起坚实的数字设计基础,并在实践中掌握Verilog语言的使用。通过实现书中的设计,您可以提高自己的设计能力和应用水平,从而更好地进行FPGA开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Verilog HDL高级数字设计(第2版)(英文版)](https://download.csdn.net/download/lll_211/11034137)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Verilog HDL高级数字设计学习(一)](https://blog.csdn.net/sz_woshishazi/article/details/106179232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值