【FPGA学习笔记】==从小白到大神的逆袭之路==

  1. 一种采集信号上升沿的方法
reg a_0;
reg a_1;
always @(posedge clk)
	begin
		a_0 <= a;
		a_1 <= a_0;
	end
assign pos_a = (~a_1) & a_0;
  1. always块里面的非阻塞赋值是同时进行的,这和c语言的串行执行的思维完全不一样,有时候看程序会看的很迷糊,如果用并行的思想,很有可能一瞬间豁然开朗,还有就是各变量在赋值的时候赋的都是时钟沿前一瞬间的值。

  2. 一个很好用的分频小技巧

reg[N - 1:0] count;
always @(posedge clk)
	if(reset)
		count <= 0;
	else
		count <= count + 1;

always @(count[N - 1],count[N - 2] //得到一个clk/2^(N-2)的时钟频率
	begin
		....
	end
  1. FPGA内的寄存器,如果不赋初值,默认为0;
    但是在仿真软件中(如modelsim),寄存器如果不赋初值,默认为不dao定态(x),仿真是无法进行的。

  2. 一个好用的节拍器(我称它为数据延时器)

module dapaiqi(clk,data,data1);
input clk;
input data;
output data1;
reg data0;
reg data1;

always@(posedge clk)
	begin
		data0<=data;
		data1<=data0;
	end
endmodule

【FPGA学习笔记】==从小白到大神的逆袭之路==_第1张图片
因为存在门延时,所以data1的数据不是理想的延后两个时钟周期

6.对于循环变量只能用integer,今天用了reg型变量作为循环遍量,电脑内存直接爆炸,虽然不知道啥原因。

你可能感兴趣的:(FPGA,嵌入式,fpga)