欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FPGA(7) 实验综合2 时钟分/倍频操作

程序员文章站 2022-03-13 17:24:30
...

FPGA(7) 实验综合2

系统分频

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 ManagerFPGA(7) 实验综合2 时钟分/倍频操作
下一步后输入altpll,选择IO中的ALTPLL,语言选择Verilog,一般保存在par文件下的新建文件夹pllcore中FPGA(7) 实验综合2 时钟分/倍频操作
再next后选择speed grade 和系统时钟频率(根据自己的芯片来)
FPGA(7) 实验综合2 时钟分/倍频操作

从上到下选择是否配置复位,是否稳定后再输出,和是否自锁
FPGA(7) 实验综合2 时钟分/倍频操作

扩展频谱时钟,和带宽的编程,一般不会用到。
FPGA(7) 实验综合2 时钟分/倍频操作

时钟转换配置页面
FPGA(7) 实验综合2 时钟分/倍频操作

选择动态配置pll实现时钟实时配置
FPGA(7) 实验综合2 时钟分/倍频操作

可以有上下两种方式配置时钟
FPGA(7) 实验综合2 时钟分/倍频操作

添加仿真库页面

FPGA(7) 实验综合2 时钟分/倍频操作

生成总结页面,finish后选择yes就可以在file中查看
FPGA(7) 实验综合2 时钟分/倍频操作

相关标签: 嵌入式