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

HDLbits: ps2data

这一题在上一题基础上多了一个输出,并且这个输出是不需要像上一题考虑出错的情况的,所以只要把输入in按次序排好就可以。我一开始的想法是在状态切换判断的always块里把in赋给out,但是不正确,代码如下:

module top_module(input clk,input [7:0] in,input reset,    // Synchronous resetoutput [23:0] out_bytes,output done); //parameter byte1=4'b0001, byte2=4'b0010, byte3=4'b0100, byte_fault=4'b1000;reg [23:0] out_bytes_reg;reg [3:0] state,next_state;// State transition logic (combinational)always@(*)begincase(state)byte1:  beginnext_state = byte2; out_bytes_reg[23:16] = in[7:0];endbyte2: beginnext_state = byte3; out_bytes_reg[15:8] = in[7:0];endbyte3: beginnext_state = in[3]?byte1:byte_fault;out_bytes_reg[7:0] = in[7:0];endbyte_fault: beginnext_state = in[3]?byte1:byte_fault; enddefault: next_state = byte1;endcaseend// State flip-flops (sequential)always@(posedge clk)beginif(reset)state <= byte_fault;elsestate <= next_state;end// Output logicassign done = (state == byte3);assign out_bytes = out_bytes_reg;endmodule

看了大佬的写法,又改了思路,用一个always块专门实现这部分功能,如下:

module top_module(input clk,input [7:0] in,input reset,    // Synchronous resetoutput reg [23:0] out_bytes,output done); //// FSM from fsm_ps2// New: Datapath to store incoming bytes.parameter byte1=4'b0001, byte2=4'b0010, byte3=4'b0100, byte_fault=4'b1000;reg [3:0] state,next_state;// State transition logic (combinational)always@(*)begincase(state)byte1: next_state = byte2;byte2: next_state = byte3;byte3: next_state = in[3]?byte1:byte_fault;byte_fault: next_state = in[3]?byte1:byte_fault; default: next_state = byte1;endcaseend// State flip-flops (sequential)always@(posedge clk)beginif(reset)state <= byte_fault;elsestate <= next_state;endalways@(posedge clk)beginif(reset)out_bytes <= 24'd0;elseout_bytes <= {out_bytes[15:0],in[7:0]};end// Output logicassign done = (state == byte3);endmodule

http://www.lryc.cn/news/192513.html

相关文章:

  • SpringCloudAlibaba SpringCloud SpringBoot 版本对照
  • Swift基础
  • 基于php+thinkphp+vue的校园二手交易网站
  • SystemVerilog Assertions应用指南 第一章(1.25章节 “first_match”运算符)
  • python和go执行字符串表达式
  • Python算法练习 10.14
  • 云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸
  • C# Sqlite数据库的搭建及使用技巧
  • gerrit代码review使用基本方法
  • 网络监控与故障排除:netstat命令的使用指南
  • Blender:渲染一个简单动画
  • 一篇文章带你用动态规划解决股票购买时机问题
  • 【设计模式】使用建造者模式组装对象并加入自定义校验
  • 简单聊聊低代码
  • SystemVerilog Assertions应用指南 第一章(1.27章节 “within”运算符)
  • 2023年09月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • [Mono Depth/3DOD]单目3D检测基础
  • 【Docker 内核详解】namespace 资源隔离(三):PID namespace
  • 1600*C. Game On Leaves(博弈游戏树)
  • Apache Ant的安装
  • 考研:数学二例题--∞−∞和0⋅∞型极限
  • C++算法:图中的最短环
  • C++学习——类其实也是一种作用域
  • Seata入门系列【4】undo_log、global_table、branch_table、lock_table字段及作用详解
  • 虚幻引擎:数据表格的C++常用API
  • Java日期格式化(DateFormat类和SimpleDateFormat类)
  • centos 7 lamp owncloud
  • 屏幕亮度调节保护您的眼睛
  • CentOS Linux下CMake二进制文件安装并使用Visual Studio调试
  • ASP.net相关目录,相关配置文件和.后缀名解释