当前位置: 首页 > news >正文

兰州优化网站公司怎么修改2345网址导航

兰州优化网站公司,怎么修改2345网址导航,国内精自线一二区网页版,成都住建局官网保租房⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库&#xf…

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
🔥文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复 FPGA 也可获取。

文章目录

    • 状态图的建立过程
    • 状态图描述方法
      • 单个always块描述状态机的方法(尽量避免)
      • 两个always块描述状态机的方法(推荐写法)
      • 使用三个always块分别描述
      • 三种描述方法比较

状态图的建立过程

设计一个序列检测器电路。功能是检测出串行输入数据Sin中的4位二进制序列0101(自左至右输入),当检测到该序列时,输出Out=1;没有检测到该序列时,输出Out=0。(注意考虑序列重叠的可能性,如010101,相当于出现两个0101序列)。

解:首先,确定采用米利型状态机设计该电路。因为该电路在连续收到信号0101时,输出为1,其他情况下输出为0,所以采用米利型状态机。

其次,确定状态机的状态图。根据设计要求,该电路至少应有四个状态,分别用S1、S2、S3、S4表示。若假设电路的初始状态用S0表示,则可用五个状态来描述该电路。根据分析,可以画出图(a)所示的原始状态图。

观察该图可以看出,S2、S4为等价状态,可用S2代替S4,于是得到简化状态图。

然后,根据上面的状态图给出该状态机的输出逻辑。该状态机只有一个输出变量Out,其输出逻辑非常简单,直接标注在状态图中了。若输出变量较多,则可以列出输出逻辑真值表。

最后,就可以使用硬件描述语言对状态图进行描述了。

状态图描述方法

利用Verilog HDL语言描述状态图主要包含四部分内容:

  1. 利用参数定义语句parameter描述状态机中各个状态的名称,并指定状态编码。例如,对序列检测器的状态分配可以使用最简单的自然二进制码,其描述如下:

    parameter  S0=2'b00, S1=2'b01, S2 = 2'b10, S3 = 2'b11;
    

    或者,

    parameter [1:0] S0=2'b00, S1=2'b01, S2 = 2'b10, S3 = 2'b11;
    
  2. 用时序的always 块描述状态触发器实现的状态存储。

  3. 使用敏感表和case语句(也可以采用if-else等价语句)描述的状态转换逻辑。

  4. 描述状态机的输出逻辑。

描述状态图的方法多种多样,下面介绍几种:

单个always块描述状态机的方法(尽量避免)

用一个always块对该例的状态机进行描述,其代码如下:

module Detector1 ( Sin, CP, nCR, Out) ;input Sin, CP, nCR;    //声明输入变量output Out ;                //声明输出变量reg Out; reg [1:0] state;  
// 声明两个状态触发器变量state[1]和state[0],记忆电路现态
//The state labels and their assignments
parameter [1:0] S0=2'b00, S1=2'b01, S2 = 2'b10, S3 = 2'b11;
always @(posedge CP or negedge nCR)   
begin
if (~nCR)
state <= S0;  //在nCR跳变为0时,异步清零
elsecase(state) S0: begin Out =1’b0; state <= (Sin==1)? S0 : S1; endS1: begin Out = 1’b0; state <= (Sin==1)? S2 : S1; endS2: begin Out = 1’b0; state <= (Sin==1)? S0 : S3; end	  S3: if (Sin==1)  begin Out =1’b1; state <=  S2; endelse               begin Out =1’b0; state <= S1; end               	endcase
end
endmodule

严格地说,对序列检测器电路用单个always块的描述方法所描述的逻辑存在着一个隐含的错误,即输出信号Out的描述。

case语句中对输出向量的赋值应是下一个状态输出,这点易出错;状态向量与输出向量都由寄存器实现,面积大,不能实现异步米勒状态机。因此,单个always块描述状态机的写法仅仅适用于穆尔型状态机。单个always块写法的电路结构框图可以用下图进行概括。

两个always块描述状态机的方法(推荐写法)

用两个always块对该例的状态机进行描述,其代码如下:

module  Detector2 ( Sin, CP, nCR, Out) ;
input Sin, CP, nCR;    //定义输入变量
output Out ;                //定义输出变量
reg Out; 
reg [1:0] Current_state, Next_state;
parameter [1:0] S0=2'b00, S1=2'b01, S2 = 2'b10, S3 = 2'b11;
//状态转换,时序逻辑always @(posedge CP or negedge nCR ) 
begin
if (~nCR)Current_state <= S0;   //异步清零
elseCurrent_state <= Next_state; //在CP上升沿触发器状态翻转end//下一状态产生和输出信号,组合逻辑
always @( Current_state or Sin) begin	Next_state =2’bxx;                                                                                                                                                                                                                      Out=1’b 0;case(Current_state )S0: begin Out =1’b0; Next_state = (Sin==1)? S0 : S1; endS1: begin Out =1’b0; Next_state = (Sin==1)? S2 : S1; endS2: begin Out =1’b0; Next_state = (Sin==1)? S0 : S3; end	 S3: if (Sin==1)begin Out =1’b1; Next_state = S2; endelsebegin Out =1’b0; Next_state = S1; end	  endcaseend	endmodule

用两个always块描述状态机的写法是值得推荐的方法之一,两个always块写法的电路结构框图可以用下图进行概括。

两个always块写法的电路结构框图概括。

第一个always模块采用同步时序逻辑方式描述状态转移(中间方框); 第二个always模块采用组合逻辑方式描述状态转移规律(第一个方框)和描述电路的输出信号(第三个方框)。

使用三个always块分别描述

即第一个always模块采用同步时序逻辑方式描述状态转移(中间方框); 第二个always模块采用组合逻辑方式描述状态转移规律(第一个方框); 第三个always模块描述电路的输出信号,在时序允许的情况下,通常让输出信号经过一个寄存器再输出,保证输出信号中没有毛刺。

用三个always块对该例的状态机进行描述,其代码如下:

module  Detector3 ( Sin, CP, nCR, Out) ;input Sin, CP, nCR;    //定义输入变量output Out ;                //定义输出变量reg Out; reg [1:0] Current_state, Next_state;parameter [1:0] S0=2'b00, S1=2'b01, S2 = 2'b10, S3 = 2'b11;
//状态转换,时序逻辑
always @(posedge CP or negedge nCR )beginif (~nCR)Current_state <= S0;                 //异步清零elseCurrent_state <=  Next_state; //在CP上升沿触发器状态翻转end //下一状态产生,组合逻辑
always @( Current_state or Sin) begin	Next_state =2’bxx;                                                                                                                                                                                                                      case(Current_state )S0: begin Next_state = (Sin==1)? S0 : S1; endS1: begin Next_state = (Sin==1)? S2 : S1; endS2: begin Next_state = (Sin==1)? S0 : S3; end	 S3: if (Sin==1)begin Next_state = S2; endelsebegin Next_state = S1; end	  endcaseend	/* 输出逻辑: 让输出信号经过一个寄存器再输出,可以消除Out信号中的毛刺,时序逻辑*/
always @ (posedge CP or negedge nCR )beginif (~nCR)    Out <= 1’b 0;else begin case(Current_state )S0, S1, S2:          Out <= 1’b0;	 S3:               if (Sin==1)  Out <= 1’b1; else             Out <= 1’b0; endcaseend	end	
endmodule

三种描述方法比较

1-always2-always3-always
结构化设计
代码编写/理解不宜,理解难
输出信号寄存器输出组合逻辑输出寄存器输出
不产生毛刺产生毛刺不产生毛刺
面积消耗最小
时序约束不利有利有利
可靠性、可维护性较高最高
后端物理设计不利有利有利

参考文献:

  1. Verilog HDL与FPGA数字系统设计,罗杰,机械工业出版社,2015年04月
  2. Verilog HDL与CPLD/FPGA项目开发教程(第2版), 聂章龙, 机械工业出版社, 2015年12月
  3. Verilog HDL数字设计与综合(第2版), Samir Palnitkar著,夏宇闻等译, 电子工业出版社, 2015年08月
  4. Verilog HDL入门(第3版), J. BHASKER 著 夏宇闻甘伟 译, 北京航空航天大学出版社, 2019年03月
http://www.yayakq.cn/news/975420/

相关文章:

  • 网站优化的监测评价工程信息网站排名
  • 网站平台建设费用新品发布会海报
  • 泉州做网站企业wordpress 只搜索标题
  • 做淘宝客网站一定要备案吗检查目录遍历漏洞wordpress站点
  • 网站建设泉州wordpress 中文编辑器
  • 品牌宣传网站建设qq刷赞网站推广全网
  • 曹县商城网站建设南山网站设计公司
  • 厦门u 网站建设wordpress为静态
  • 网站建设收费价格东森推广官网
  • 东莞市网站seo城阳做网站的公司
  • 重庆会计之家是谁做的网站wordpress登录窗口
  • 学校能建设网站吗网站搜索引擎优化方案范文
  • 娱乐网站建设ppt福州的网站建设
  • visual c 网站开发公司注册地址租赁一般多少钱
  • 视频网站做板块栏目wordpress打开网页慢
  • 开发网站如何选需要用html做静态网站
  • seo网站建设流程怎么给网站建设提建议
  • 重慶网站建设公司网站内容相近
  • 厦门成交型网站建设公司腾讯云服务器用什么做网站
  • 兰州新区农投建设网站阿里云个人备案可以做企业网站
  • 济南网站制作公司报价邢台哪儿做wap网站
  • 烟台市建设工程交易中心网站公司注册资金最低是多少
  • 商城类网站价格手机开发者模式怎么打开
  • 杭州网站制作推荐天堂呦呦
  • 东莞微信网站建设咨询如何制作微信小程序游戏
  • 网站快速上排名方法外贸网站增加权重
  • 深圳做网站服务找做玻璃的网站
  • 三站合一网站曲靖网站制作一条龙
  • 网站找人做seo然后网站搜不到了长沙网站备案拍照点
  • p2p网站建设费用阜阳市建设工程网站