@Tessedar
2015-03-13T07:51:22.000000Z
字数 3875
阅读 803
ECU for Power Module 硬件工程文档
日期:2015年3月13日
版本:1.0
作者:R. G.
LegoCar ECU
总体进度与描述
上一阶段:完成了大部分的板级验证工作,仍有一个已知问题待解决:pack_check检验帧头。
这一阶段:解决了上一个版本中存在的帧头检验缺失的问题。
下一阶段:项目进入维护阶段。
clk16x_gen.v
Version 0.1
- 特点:以50MHz的时钟为基础,生成16*115200Hz的UART信号采样时钟
- 描述:对于这种分频前后的时钟频率不为倍数关系的分频器该如何编写,可以参考这里。
- 测试:在JointTest1234_onBoard_new工程中板级验证成功。
clkPWM_gen.v
Version 0.1
- 特点:以50MHz的时钟为基础,生成115200Hz的UART及PWM信号时钟
- 描述:对于这种分频前后的时钟频率不为倍数关系的分频器该如何编写,可以参考这里。
- 测试:在JointTest1234_onBoard_new工程中板级验证成功。
uart_read.v
Version 1.1
- 特点:修改上一版本的代码风格,并修正一个由代码风格引发的错误。
- 描述:上一版本的代码中,cnt信号在声明前就被使用。这在QuartusII中没有问题,但在ModelSim-Altera中会报语法错误。
- 测试:在JointTest1234_onBoard_new工程中板级验证成功。
Version 1.0
- 特点:UART串口接收模块
- 描述:代码来自网络。
- 测试:在QuartusII中通过语法检查,成功添加入工程,且综合成功。
uart_read_tb.v
Version 0.1
- 特点:实现对uart_rx模块的功能仿真
- 测试:在ModelSim-Altera中成功完成编译及仿真
uart_write.v
Version 1.0
- 特点:UART串口通信的发送端。
- 描述:在网上找的。
- 测试:
- 在QuartusII中通过语法检查,综合成功。
- 仿真时发现:如果与接收模块直接相连,则时常会出现发送的数据还没有发完,接收的数据已经到来,于是就错过了某段数据的问题。不过该问题可以忽略,因为接收模块是无条件递交数据,而没有考虑此处发送模块的忙信号。
pack_check.v
Version 0.9.5:
- 特点:基于上一版本进行改进,重新使用堆栈式缓冲区。
- 描述:
- 上一个版本中,没有实现对帧头的检验,会导致模块接收非法的数据以及后续数据错位。如果使用移位寄存器,由于对其的数据载入不受cnt直接控制,因此添加帧头校验的时候就需要同时控制buffer、cnt和checksum三个信号,复杂度略高,且后续维护较为困难;若使用堆栈式缓冲区,其数据载入受其游标(即cnt信号)的直接控制,因此只需要控制cnt与checksum二者即可。
- 同时,此版本改善了注释处的图释,使其更易理解。
- 测试:
- 时序仿真成功;
- 在JointTest1234_onBoard_new工程中板级验证成功。
Version 0.9.4:
- 特点:基于前两个版本的经验,通过板级验证定型
- 描述:
- 在使用0.9.2.2版本进行板级验证时,发现数据的生效有延时:这一帧的数据必须等待下一帧到来时才能生效。这是由于新到来的帧才能带来UART模块中DataReady信号的上升沿,才能触发本模块FrameReady信号的下降沿,才能使下一级的decode_config接收上级数据。
- 解决方法是:将校验字段作为停止字段,并且不将其载入移位寄存器中。这样就可以让FrameOutput稳定两个周期,并在FrameReady上升沿时保持稳定。在实现该方案时,使用修改过后的0.9.3版本更为合适。遂重新启用其设计。
- 测试:在JointTest1234_onBoard_new工程中板级验证成功,但仍存在问题:
- 串口服务器上下电时,都会使得rx的电压被拉低,使得UART模块错误地接收无效数据。没有对帧头的检验,会导致模块接收非法数据的输入,并使得后续数据错位。
Version 0.9.3(obsoleted):
- 特点:采用了之前的改良方案并予以实现。
- 描述:将上一个版本中FrameOutput信号的实现方式从寄存器改为连接到buffer的线,节省了器件,简化了实现。
- 测试:
- 根据0.1版本的pack_check_shift_tb,功能仿真成功。
- 根据0.1版本的joint_test_12,与1.1版本的UART模块联合功能仿真成功。
- 根据0.1版本的joint_test_123,联合功能仿真失败:时序紊乱,由于FrameOutput为buffer的连线,在时序上慢了一拍,导致decode_config模块无法正常接收数据。
- 放弃该版本。
Version 0.9.2.2:
- 特点:修正了上一个版本的实现错误,完成仿真,并提出了改良方案(废弃)。
- 描述:
- 上一个版本中FrameOutput的实现有一个与时序相关的错误;
- 提出了一个FrameOutput的简化实现方案(废弃),详情见下方注释。
- 测试:
- 根据pack_check_shift_tb v0.1,功能仿真成功。
- 根据0.1版本的joint_test_123,与UART v1.1及decode_config v0.1.2模块联合功能仿真成功。
- 根据0.1版本的joint_test_1234,与UART v1.1,decode_config v0.1.2及pwm v0.1模块联合功能仿真正确。
- 根据0.1版本的timing_joint_test_1234,与UART v1.1,decode_config v0.2及pwm v0.1模块联合功能仿真正确。
Version 0.9.2.1
- 特点:基于上一个版本,修正了语法错误。
- 描述:修正了上一个版本frame_length中case处buffer的宽度错误;原先FrameReceived的宽度处表达式内有括号,在图形文件中连线后综合会出错。
- 测试:综合成功。
Version 0.9.2
- 特点:将buffer改为移位寄存器,简化了实现方式。
- 描述:上一个版本通不过语法检查,遂进行了修改;与0.9.1版互为平行分支,都是在0.9版基础上的修改。
- 测试:编译测试通过,成功添加入Quartus II工程。
Version 0.9.1
- 特点:修改了FrameOutput的赋值方式。
- 描述:上一个版本通不过语法检查,遂进行了修改;与0.9.2版互为平行分支,都是在0.9版基础上的修改。
- 测试:未测试。
Version 0.9
- 特点:pack & check的另一个版本,直接使用UART_RX的DataReady(DR)作为时钟。
- 描述:由于在写之前版本的代码时,发现几乎所有信号都要根据DR上升沿做行动,因此尝试直接使用DR作为时钟,遂有此版本。
- 测试:编译测试,语法错误:integer不可以用于边界声明之内。
Version 0.8
- 特点:初步实现了pack&check模块的功能
- 测试:还没有做过任何的测试。
pack_check_shift_tb.v
Version 0.1
- 特点:实现对Pack&Check模块的功能仿真
- 测试:在ModelSim-Altera中成功完成编译及仿真。
decode_config.v
Version 0.3
- 特点:重新采集上升沿,以满足即时性要求
- 描述:由于pack_check模块的实现被改良,因此重新采集上升沿,这将保证数据的即时性:每一帧的到来都能马上生效。
- 测试:在JointTest1234_onBoard_new工程中板级验证成功。
Version 0.2
- 特点:更改了时钟,以满足时序要求
- 描述:
- 上一版本采用上升沿时钟,时序上无法满足要求:要么采集不到数据,要么延迟一个周期才能采集到。这些都是由于Pack&Check的FrameReady信号上升沿时,FrameOutput信号不稳定造成的。
- 由于Pack&Check v0.9.2.2版本的FrameOutput信号是用寄存器输出的,在前后两个FrameReady上升沿中间,数据会持续保存,因此此处将decode_config改为捕捉FrameReady下降沿。
- 测试:
- 综合成功
- 根据0.1版本的timing_joint_test_1234,与UART v1.1,Pack&Check v0.9.2.2及PWM v0.1联合时序仿真正确。
Version 0.1.2
- 特点:修复上一版本的错误,添加少许注释。
- 描述:上一版本功能字数值与协议不一致,以协议为准。
- 测试:综合成功
- 根据0.1版本的decode_config_tb,功能仿真正确。
- 根据0.1版本的joint_test_123, 与UART v1.1及Pack&Check v0.9.2.2联合功能仿真正确。
- 根据0.1版本的joint_test_1234,与UART v1.1,Pack&Check v0.9.2.2和pwm v0.1模块联合功能仿真正确。
Version 0.1.1
- 特点:修复上一版本的错误。
- 描述:原先FrameReceived的宽度处表达式内有括号,在图形文件中连线后综合会出错。
- 测试:综合成功。
Version 0.1
- 特点:基本实现逻辑和功能
- 测试:在QuartusII中通过语法检查,成功添加入工程
pwm.v
Version 0.1
- 特点:基本实现逻辑和功能
- 测试:在JointTest1234_onBoard_new工程中板级验证成功。