FPGA(7) 实验综合2 时钟分/倍频操作
程序员文章站
2022-03-13 17:24:30
...
系统分频
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
clk_cnt <= 4'd0;
dri_clk <= 1'b1;
end
else if(clk_cnt == CLK_DIVIDE/2 - 1'd1) begin
clk_cnt <= 4'd0;
dri_clk <= ~dri_clk;
end
else begin
clk_cnt <= clk_cnt + 1'b1;
dri_clk <= dri_clk;
end
end
这里系统时钟每计数(clk_divide/2-1)次dri_clk时钟翻转一次
如果十分频就clk_divide定义为十,clk_cnt每加1都经过两次翻转,所以加到五时翻转一次dri_cnt为十分频
减慢时间可能是因为要等所有语句执行完毕
BCD码
拿最常用的8421编码举例
在8421条件下,1111表示的十进制数是18+14+12+11=15一一对应的相乘。
//将20位2进制数转换为8421bcd码(即使用4位二进制数表示1位十进制数)
always @ (posedge dri_clk or negedge rst_n) begin
if (!rst_n)
num <= 24'b0;
else begin
if (data5 || point[5]) begin //如果显示数据为6位十进制数,
num[23:20] <= data5; //则依次给6位数码管赋值
num[19:16] <= data4;
num[15:12] <= data3;
num[11:8] <= data2;
num[ 7:4] <= data1;
num[ 3:0] <= data0;
end
else begin
if (data4 || point[4]) begin //如果显示数据为5位十进制数,则给低5位数码管赋值
num[19:0] <= {data4,data3,data2,data1,data0};
if(sign)
num[23:20] <= 4'd11; //如果需要显示负号,则最高位(第6位)为符号位
else
num[23:20] <= 4'd10; //不需要显示负号时,则第6位不显示任何字符
end
else begin //如果显示数据为4位十进制数,则给低4位数码管赋值
if (data3 || point[3]) begin
num[15: 0] <= {data3,data2,data1,data0};
num[23:20] <= 4'd10; //第6位不显示任何字符
if(sign) //如果需要显示负号,则最高位(第5位)为符号位
num[19:16] <= 4'd11;
else //不需要显示负号时,则第5位不显示任何字符
num[19:16] <= 4'd10;
end
else begin //如果显示数据为3位十进制数,则给低3位数码管赋值
if (data2 || point[2]) begin
num[11: 0] <= {data2,data1,data0};
//第6、5位不显示任何字符
num[23:16] <= {2{4'd10}};
if(sign) //如果需要显示负号,则最高位(第4位)为符号位
num[15:12] <= 4'd11;
else //不需要显示负号时,则第4位不显示任何字符
num[15:12] <= 4'd10;
end
else begin //如果显示数据为2位十进制数,则给低2位数码管赋值
if (data1 || point[1]) begin
num[ 7: 0] <= {data1,data0};
//第6、5、4位不显示任何字符
num[23:12] <= {3{4'd10}};
if(sign) //如果需要显示负号,则最高位(第3位)为符号位
num[11:8] <= 4'd11;
else //不需要显示负号时,则第3位不显示任何字符
num[11:8] <= 4'd10;
end
else begin //如果显示数据为1位十进制数,则给最低位数码管赋值
num[3:0] <= data0;
//第6、5位不显示任何字符
num[23:8] <= {4{4'd10}};
if(sign) //如果需要显示负号,则最高位(第2位)为符号位
num[7:4] <= 4'd11;
else //不需要显示负号时,则第2位不显示任何字符
num[7:4] <= 4'd10;
end
end
end
end
end
end
end
PLL锁相环
QuartusII 提供了锁相环的IP核,对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和编程占空比的功能。
ip核的创建
tools --> MefgaWizard Plug-In Manager
下一步后输入altpll,选择IO中的ALTPLL,语言选择Verilog,一般保存在par文件下的新建文件夹pllcore中
再next后选择speed grade 和系统时钟频率(根据自己的芯片来)
从上到下选择是否配置复位,是否稳定后再输出,和是否自锁
扩展频谱时钟,和带宽的编程,一般不会用到。
时钟转换配置页面
选择动态配置pll实现时钟实时配置
可以有上下两种方式配置时钟
添加仿真库页面
生成总结页面,finish后选择yes就可以在file中查看
上一篇: 2440的时钟初始化