集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

Verilog HDL 夏宇闻--数字系统设计的核心知识

[复制链接]
 楼主| lcytms 发表于 2017-7-24 09:52:55 | 显示全部楼层
表示方法之四(续)

module  fsm (Clock, Reset, A,  K2, K1, state);
input Clock, Reset, A;
output K2, K1;
output [4:0] state;
reg [4:0] state ;
 
assign
  K2= state[4];  // 把状态变量的最高位用作输出K2
assign
  K1= state[0];  // 把状态变量的最低位用作输出K1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-7-24 09:54:06 | 显示全部楼层
表示方法之四(续)

parameter
//-------output coded state assignment   ---
//--------       K2_i_j_n_K1 –
Idle        =  5'b0_0_0_0_0,
Start       =  5'b0_0_0_1_0,  
Stop        =  5'b0_0_1_0_0,
StopToClear =  5‘b1_1_0_0_0,//这里就是状态变化
Clear       =  5‘b0_1_0_1_0,//从而产生了输出
ClearToIdle =  5'b0_0_1_1_1;
 
主要的改进在状态变化产生输出的过程编入了状态编码
中,这样就省去了多余的always block。这里如何编码
是最重要的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-7-24 09:55:27 | 显示全部楼层
表示方法之四(续)

always @(posedge Clock)
  if (!Reset)
     begin
     state <= Idle;  
     end
  else
case (state)
    Idle :  if (A)   
              state <= Start;        
              else state <= Idle;
               
    Start:  if (!A)  state <= Stop;
               else  state <= Start;
      

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-7-24 09:56:40 | 显示全部楼层
表示方法之四(续)

Stop:   if (A)  
             state <= StopToClear;      
         else  state <= Stop;

StopToClear:  state <= Clear;//既然是to clear状态自然为clear

Clear:  if (!A)
              state <= ClearToIdle;      
        else  state <= Clear;
               
ClearToIdle:  state <= Idle;
&#160;
default:   state <= Idle;
endcase
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-7-24 09:58:24 | 显示全部楼层
状态机的测试

    不同风格的描述适合不同规模的状态机和不同的综合工具,有的风格查错和修改较容易,但写简单的状态机时比较麻烦。
Synopsys公司的综合器建议使用这种风格来描述状态机。
&#160;
     上面四个例子是同一个状态机的四种不同的Verilog HDL模型,它们都是可综合的,在设计复杂程度不同的状态机时有它们各自的优势。
如用不同的综合器对这四个例子进行综合,综合出的逻辑电路可能会有些不同,但逻辑功能是相同的。
下面列出测试这些不同风格状态机的测试模块,供同学们参考:
&#160;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
小舍YZ 发表于 2017-7-24 14:25:55 | 显示全部楼层
不同风格的描述适合不同规模的状态机和不同的综合工具,有的风格查错和修改较容易,但写简单的状态机时比较麻烦。
Synopsys公司的综合器建议使用这种风格来描述状态机。

赞,,,,,,,,,,,,,,,,谢谢分享。。。。。。。。。。。。。。。。。
4798345 发表于 2017-7-24 16:23:46 | 显示全部楼层
感谢楼主                        
 楼主| lcytms 发表于 2017-7-25 09:40:05 | 显示全部楼层
状态机的测试模块

`timescale 1ns/1ns
module t;
   reg a;
   reg clock,rst;
   wire k2,k1;
initial              // initial常用于仿真时信号的给出。
     begin
       a=0;
       rst = 1;       //给复位信号变量赋初始值
       clock = 0;      //给时钟变量赋初始值
       #22 rst = 0;    //使复位信号有效
       #133 rst = 1;   //经过一个多周期后使复位信号无效
     end
&#160;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-7-25 09:41:44 | 显示全部楼层
状态机的测试模块

always #50 clock = ~clock; //产生周期性的时钟
&#160;
always @ (posedge clock)   //在每次时钟正跳变沿时刻产生不同的a
        begin   
             #30 a = {$random}%2;   // 每次a是 0还是1是随机的。
             #(3*50+12);  // a 的值维持一段时间
        end
initial
      begin   #100000   $stop;  end   
            //系统任务,暂停仿真以便观察仿真波形。
&#160;
//----------- 调用被测试模块t.m ----------
fsm  m(.Clock(clock), .Reset(rst),.A(a),.K2(k2),.K1(k1));   
   
endmodule   
&#160;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-7-25 09:43:41 | 显示全部楼层
状态机设计的总结:

有限状态机设计的一般步骤:
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;1)&#160;&#160;逻辑抽象,得出状态转换图

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2)&#160;&#160;状态化简

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;3)&#160;&#160;状态分配
   在触发器资源丰富的FPGA或ASIC设计中采用独热编码(one-hot-coding),既可以使电路性能得到保证又可充分利用其触发器数量多的优势,也可以采取输出编码的状态指定来简化电路结构,并提高状态机的运行速度。
&#160;
4) 选定触发器的类型并求出状态方程、驱动方程和输出方程。
&#160;
&#160;5)&#160;&#160;&#160;按照方程得出逻辑图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-29 05:24 , Processed in 0.073959 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表