聚光科技实习笔记(2015.7.13 - 2015.7.17)

开发笔记

2015.7.13 - 2015.7.17

简述

本周是我真正开始接触verilog开发的一周,
本周我主要是完成了一个小型的计数平均器的开发。

  • 首先,我把设计转化为verilog设计语言
  • 然后,使用modelsim对每个模块进行了功能性仿真,已验证逻辑设计的正确性。
  • 随后,使用了signaltap ii对项目进行片上仿真
  • 最终,项目通过了多次普通频率信号的仿真之后,确定运行正常且实现了最初的设计目的

细节

设计目的和预期

时钟

晶振时钟使用的是50 Mhz,而经过PLL之后倍频为系统时钟 100Mhz

功能

先采集每10ms输入脉冲的数量,再对10个采样值取平均数

设计图和verilog代码的实现

设计上分为三个模块

  • PLL模块:用于产生系统时钟和测试信号,直接使用IP核产生。c0为2倍频,用于系统时钟;c1为四倍频,用于测试对照时钟;c2为四分频,用于模拟采样信号
  • echantion模块:用于采样,由verilog编写
  • calcul模块:用于处理数据输出平均值,由verilog编写
remarque

verilog代码的编写有很大自由,但是综合软件特别笨,往往无法综合代码。
以下是写出可综合代码需要注意的点:

  • 尽可能简化结构,模块化编程。
  • 如有可能,在一个结构内只对一个变量做调整
  • 一个变量只能在一个always行为语句中被赋值
  • assign 只能给wire赋值
  • 输入输出接口的数据长度要一致
  • 预先判断好数据长度,防止数据过大而溢出
  • 使用reset而不是initial
  • 使用==和!= 而不是 ===和!==

modelsim的仿真

modelsim是一款强大的仿真软件,此次用于功能性仿真。需要注意的是modelsim可以理解所有verilog语言,所以testbench的自由度比较高,但是仿真结束后未必意味着可以综合。
推荐在仿真之后使用tool> Netlist Viewer > technology Map Viewer和RTL Viewer来确认。 technology Map Viewer 可以看出代码是否真的可以被综合,而RTL Viewer可以看到是否逻辑正确

引脚分配

使用tcl脚本分配引脚,语句模板是
set_location_assignment PIN_30 -to i_clk

signalTap ii的仿真

这是本项目的关键,通过逐个模块信号的仿真,可以最终得到符合要求的最终项目版本。
另外,生成的.sof文件位于output_file文件夹里

remarque

时钟的设置是关键,推荐使用最高频率的时钟或者系统时钟。
此处我们使用的是PLL产生的四倍频时钟

实验中使用的采样和仿真结果

50Mhz ->每次取样10ms脉冲数为500 0x1F4

聚光科技实习笔记(2015.7.13 - 2015.7.17)_第1张图片
50MHZ.png

25Mhz ->每次取样10ms脉冲数为250 0xFA

聚光科技实习笔记(2015.7.13 - 2015.7.17)_第2张图片
25MHZ.png

12.5Mhz ->每次取样10ms脉冲数为125 0x7D

聚光科技实习笔记(2015.7.13 - 2015.7.17)_第3张图片
12.5MHZ.png

总结

通过这个项目,我初次接触了完整的开发流程,并且试验了modelsim的使用,为之后项目开发做了准备。

你可能感兴趣的:(聚光科技实习笔记(2015.7.13 - 2015.7.17))