定时器 Timer
参数说明:
- CLK_FREQ 时钟频率,默认 20MHz
信号说明:
- clk 时钟信号
- rst_n 复位信号,低位有效(异步)
- en 定时使能
- ready 定时可用信号
- notify 超时信号
级联 7 个 4 位计数器,理论上最大可以完成 16^7-1 MHz 时钟 1sec 的计时。
前驱计数器的计数信号从非零变为 0 时触发后继计数器,完成计数器位宽的拓展。
在时钟上升沿给使能信号时,ready 置低电平表示正在计时中,同时计数器开始工作。
当定时结束时,在时钟上升沿 ready 置高电平同时 notify 置高电平。
其中使能信号的优先级高于超时信号,若超时时使能有效则直接进入下一轮计时。
进入计时时计数器不会复位,故不复位直接进行连续计时会导致定时功能异常。
串并转换器 SerDes
信号说明:
- clk 时钟信号
- rst_n 复位信号,低位有效(异步)
- ser_in 串行输入
- en_rd 读有效信号
- par_out 并行输出
第一个 clk 上升沿开始过程,接下来的 4 拍分别读入 1bit 串行数据,在第 5 拍输出(第 5 拍先读入第 4 个 bit)。
完成一次串并转换后模块暂停,若要继续转换需要复位。
课程使用 Quartus 作为综合工具。由于编译器的一些差异,直接导入源码可能会出现一些错误,见下。
模块名称冲突问题
DFF 是 Quartus 的元器件,重名会导致编译错误,请自行修改(包括模块名、模块尾部 label、文件名)。
算符优先级问题
Quartus 不允许 &~dat 这样的语句(dat 取反后逐位按位与),需要加上括号写作 &(~dat)。
引用问题
Quartus 下同一项目下的模块互相可见,直接引用即可,不需要再加 include 语句。
跨模块访问问题
Quartus 不允许访问模块的内部信号,如必须访问,可以从被访问的模块打个 output 出来。