V3学院1元培训班笔记(腾讯视频)
[2019-10-20 12:00]
1.如果时序出现一些问题,可以将查找表和寄存器约束在同一个LE里,这样其组合逻辑的路径会很短
Altera
LAB:逻辑阵列块 包含16个LE
LE: 查找表1 +寄存器1
我们写的if…else… 最终映射到查找表(以四输入查找表为例,可以写4个1bit条件)
得出的值 最终映射到寄存器中
如果我们写的if后面的位宽比较大或者条件较多,就会占用很多LUT,然后从LUT出来再到某一个寄存器,会有很多走线路径,延时比较大。
==> So 刘工不让我在if后面写太多的条件,不写太多位宽的东西
为什么建议if后面都写1bit信号,因为1bit信号会被综合布线到寄存器的使能端,而非经过LUT过来,减少延时,产生毛刺的概率小一些。
组合逻辑条件不全就会产生launch.
为什么FPGA不建议用Launch?因为其路径延时不确定
Launch是否是废物?在跨时钟域的时候有用,它与时钟无关,仅仅是通过电平将数据锁住.
======================
2.
// 读文件到tb文件
initial begin
$readmemh("./data.txt",mem);
End
注意,单独这样写是在modelsim的Memory List中看不到数据的,都是xx,是因为内部没有信号所致,故随便加上一个信号就行。
如何看task中的数据
#######################################
#看task里边的数据
add wave -divider {task gen data}
add wave s2p_tb/gen_data/*
#######################################
在moselsim的transcript中打或者在run.do中打即可
======================
3. 两个小技能需要学一下
注意传给下游的数据采集标志信号sync不要放在数据的第一拍,此时数据可能还未稳定,(要改掉以前的老习惯),需要放在数据的中间.
像下路每次shift_cnt0的时候要锁存shift_reg的数据,但考虑到一个个shift_cnt0.是不需要的,可以将cnt打一拍,用shift_cnt_dly == 7来采集。
======================
4.I2C和SCCB的区别
I2C:
SCCB:
==> 综上:SCCB的读比I2C的读多一个stop。
======================