Circuits--Sequential--FSM--q5b~q3a

  1. q5b

    module top_module (
    input clk,
    input areset,
    input x,
    output z
    );

    复制代码
     parameter A = 1'b0;
     parameter B = 1'b1;
     
     reg[1:0] state;
     reg[1:0] next_state;
    
     
     always@(*)
         begin
             case(state)
                 A:
                     if(x) next_state = B;
                 	else  next_state = A;
                 B:
                     next_state = B;
             endcase
         end
     
     always@(posedge clk or posedge areset)
         begin
             if(areset)
                 state = A;
             else
                 state = next_state;
         end
     
     always@(*)
         begin
             if(state == A)
                 begin
                     if(x)  z = 1'b1;
                     else   z = 1'b0;
                 end
                 
             else
                 begin
                   	if(x) z = 1'b0;
                   	else z = 1'b1;
               	end
         end

    endmodule

  2. q3a

    module top_module(
    input clk,
    input reset,
    input s,
    input w,
    output z
    );

    复制代码
     parameter A = 1'd0;
     parameter B = 1'd1;
     reg[1:0] state;
     reg[1:0] next_state;
     reg[1:0] count;
     reg[1:0] num;
    
     always @(*) begin
         case(state)
             A:
                 begin
                     if(s) next_state = B;
                     else  next_state = A;
                 end
             B:
                 begin
                     next_state = B;
                 end
            
         endcase
     end
    
     always @(posedge clk) begin
         if(reset)
             state <= A;
         else
             state <= next_state;
     end
    
     always @(posedge clk) begin
         if(reset)
             count <= 2'd0;
         else if(count == 2'd2)
             count <= 2'd0;
         else if(state == B)
             count <= count + 1'b1;
     end
    
     always @(posedge clk) begin
         if(reset)
             num <= 1'b0;
         else
             begin
                 if(count == 2'd0)
                     begin
                         if(w) num <= 1'b1;
                         else num <= 1'b0;
                     end 
                 else if(state == B)
                     begin 
                         if(w) num <= num + 1'b1;
                         else  num <= num;
                     end
    
             end
     end
     assign z = (state == B && num == 2'd2 && count == 2'd0);

    endmodule

相关推荐
qq_小单车14 小时前
xilinx-DNA
fpga开发·xilinx
历程里程碑15 小时前
Linux15 进程二
linux·运维·服务器·开发语言·数据结构·c++·笔记
Flamingˢ16 小时前
FPGA中的嵌入式块存储器RAM:从原理到实现的完整指南
fpga开发
dulu~dulu16 小时前
大英赛改错真题记录
笔记·英语·自用·英语改错
香芋Yu16 小时前
【机器学习教程】第03章:SVD与矩阵分解
笔记·机器学习·矩阵
EmbedLinX16 小时前
FreeRTOS 学习笔记
c语言·笔记·学习
BlackWolfSky16 小时前
鸿蒙中级课程笔记8—Native适配开发
笔记·华为·harmonyos
AI视觉网奇16 小时前
ue 模拟说话
笔记·学习·ue5
孞㐑¥17 小时前
算法—链表
开发语言·c++·经验分享·笔记·算法
BlackWolfSky17 小时前
鸿蒙中级课程笔记7—给应用添加通知
笔记·华为·harmonyos