Skip to content

About

MIT UART TX learning adaptation: upstream attribution, synchronous-reset contract and mutation test.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UART TX Reset Lab

基于开源 UART 的同步复位验证学习项目,不是原创 UART IP。

复用 Ben Marshall 的 uart,MIT; 固定版本 5fd2db850a41b65aa34f3a31c663fc8704c7abd8。 只取其中 TX,不生成 RX/FIFO/VGA 系统,不提供 AX7010 板级约束。

做了什么

上游TX端口注释写“Asynchronous active low reset”,但所有寄存器使用 always @(posedge clk) 并在内部检查 !resetn:实现是低有效同步复位。 本项目仅纠正这个注释,保留RTL行为;新增自检TB、故障注入CI和中文接口说明。 不是修复上游功能缺陷,也没有声称完整UART已验证。

怎么理解

  • resetn=0:到时钟上升沿才复位,TX回到空闲高电平,busy清零。
  • 若低脉冲完全在两个上升沿之间,该实现不会采到它。
  • 空闲时上升沿采到en=1,模块锁存发送数据、busy置位;TX输出为寄存器,起始位再晚一沿出现。
  • busy期间本TB只观察起始位和复位取消行为;完整数据、停止位、波特率误差未覆盖。
  • 改成异步复位不一定是“错误设计”,但会违反这里对既有实现的行为契约。

运行

安装Icarus Verilog,在仓库根目录:

mkdir -p build
iverilog -g2012 -s tb_tx_reset -o build/reset rtl/uart_tx.v tb/tb_tx_reset.sv
vvp build/reset

Windows需提供相应工具并先创建build目录。成功标记:RESET_CONTRACT_PASS checks=8。 复位自检发生在上升沿后1ns,下降沿附近驱动,时钟周期10ns。 CI还会把复位临时变成异步;TB必须捕获该变化,不修改正式RTL。 GitHub Actions的正常任务失败或故障变体没有被捕获,整个工作流失败。 工作流保存日志和VCD;实际状态见Actions。

当前边界

仿真练习;没有Vivado实现、时序收敛或AX7010上板结论。 固定测试参数100MHz/1Mbaud、8数据位/1停止位;不验证完整帧或任意参数。 上游的波特率计数、位宽边界等不在本次测试范围,不能因复位测试通过就用于生产。 维护者正在学习UART;AI辅助添加文档和测试,不宣称已逐行人工掌握。

来源与改动 · MIT License

About

MIT UART TX learning adaptation: upstream attribution, synchronous-reset contract and mutation test.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages