1.通过位拼接符{}来实现左移右移操作:
LED[3:0] <= { LED[2:0] , LED[3] }; //循环左移
LED[3:0] <= { LED[0 , LED[3:1] }; //循环左移
2.通过parameter定义计时器最大计数值,时钟周期等参数,便于修改且可读性强
parameter CNT_MAX = 25_000_000;//计时器最大计数值
.....
else if(cnt < CNT_MAX - 25'd1)
cnt <= cnt+1;
...
parameter CLK_PERIOD = 20; //时钟周期20ns
3.寄存器赋初值
通过给reg型变量赋初值,即为0时刻的初始值,同时也可以避免在组合逻辑always块中因为条件不完备生成锁存器。
4.仿真时可以改变计数值,从而缩小仿真时间,但是仿真结束后要记得将计数值改回来
5.vivado中的一些属性窗口说明:
Open Elaborated Design中的Schematic,是vivado根据代码生成的原理图,组成元件是由与或非门,乘法器,加法器,多路选择器,触发器等基础元件组成的。
Synthesis后的Schematic,是根据你前面所选择的器件型号,根据其对应的资源生成的,组成是由FPGA上的具体的硬件资源组成,包括LUT,DFF,CarryLogic资源,综合和执行之后所占用(所映射的)硬件资源可以在 Device窗口中看到,Device中的资源解释在其他文章中有: