您现在的位置是:主页 > news > 网站模板/如何做网站优化
网站模板/如何做网站优化
admin2025/4/26 15:24:53【news】
简介网站模板,如何做网站优化,广告推广策略,免费10g网站空间此模块采用层次化设计,将各个模块分开写,之后再通过顶层文件,对各个模块进行调用。 顶层文件里面包括分频器模块和总模块。 总模块里面有,计数器和显示器模块,总共就有这么多 以下就是各个模块的代码和代码上面都有注…
网站模板,如何做网站优化,广告推广策略,免费10g网站空间此模块采用层次化设计,将各个模块分开写,之后再通过顶层文件,对各个模块进行调用。
顶层文件里面包括分频器模块和总模块。 总模块里面有,计数器和显示器模块,总共就有这么多 以下就是各个模块的代码和代码上面都有注…
此模块采用层次化设计,将各个模块分开写,之后再通过顶层文件,对各个模块进行调用。
顶层文件里面包括分频器模块和总模块。
总模块里面有,计数器和显示器模块,总共就有这么多
以下就是各个模块的代码和代码上面都有注释它的功能
1,总模块
将十位计数器列出,利用中间变量ou实现32位计数器。
module _z(clk,clk_led,res,en,c,xs,led);
input clk,res,en,clk_led;
wire [3:0]ou1[7:0]; //[3:0] 和[7:0]共32位
wire [31:0]ou;
output c; //结果输出
output [2:0]xs; //位选信号
output [7:0]led;
wire o1,o2,o3,o4,o5,o6,o7;
//8个_j是指8个计数模块 十进制计数器
_j(clk,res,en,ou1[0],o1);
_j(o1,res,en,ou1[1],o2);
_j(o2,res,en,ou1[2],o3);
_j(o3,res,en,ou1[3],o4);
_j(o4,res,en,ou1[4],o5);
_j(o5,res,en,ou1[5],o6);
_j(o6,res,en,ou1[6],o7);
_j(o7,res,en,ou1[7],c);
assign ou = {ou1[7],ou1[6],ou1[5],ou1[4],ou1[3],ou1[2],ou1[1],ou1[0]};
//设置中间变量,按顺序合并输出
//wire [3:0]ou1[7:0];以四位为1个单位,共8位
//ou32位为中间变量,将ou1[7]到ou1[0]按顺序排列。传给显示屏
_x(clk_led,res,ou,xs,led);
//送入显示模块
endmodule
2,显示模块
总模块与显示模块存在数组的合并与拆分,是为了方便代码运行。显示模块主要是译码器将所需要的数值转换到显示屏上。
module _x(clk,res,in,xs,led);
input clk,res;
input [31:0]in;
output reg [2:0]xs; //位选信号
output reg [7:0]led; //abcdefg
reg [3:0] inreg[7:0]; //8个4位的数组
integer i;
reg p;
always @(posedge clk or negedge res)
beginif(!res)beginendelsebeginp = 0;{inreg[7],inreg[6],inreg[5],inreg[4],inreg[3],inreg[2],inreg[1],inreg[0]} = in;//从ou中收到数值,进行拆分。for(i = 7;i >= 0;i = i-1)beginif(inreg[i] != 0)
//检测数值前几位在没碰到不为0的数值时,则led输出为0Begin//如果有,则封锁p,不进行下面的运算。p = 1;endelse if(inreg[i] == 0 && p == 0)inreg[i] = 10;//如果前一个数组为0并且p没有封锁则置为10endxs = xs + 1; //位选信号case(inreg[7-xs])//七段显示译码0:begin led = 8'b11111100; end1:begin led = 8'b01100000; end2:begin led = 8'b11011010; end3:begin led = 8'b11110010; end4:begin led = 8'b01100110; end5:begin led = 8'b10110110; end6:begin led = 8'b10111110; end7:begin led = 8'b11100000; end8:begin led = 8'b11111110; end9:begin led = 8'b11110110; enddefault:led = 0;endcaseend
end
endmodule
3,计数器模块
将总模块里的十进制计数器,具体计数器方式表示出来
module _j(clk,res,en,num,c);
input clk,res,en;
output c;
output reg [3:0]num;
reg flag;
always @(posedge clk or negedge res)
beginif(!res)beginnum = 0;flag = 0;endelsebeginif(en)beginif(num < 9)beginnum = num + 1;flag = 0;endelsebeginnum = 0;flag = 1;endendend
end
//当它计数到一个周期时输出为1.
assign c = (flag == 1)?1:0;
endmodule
//十进制计数器
4,分频器模块
将所需要分频的数值在这里进行分频
input CLK,res;
output reg en;
reg [3:0]i;
always @(posedge CLK or negedge res)
beginif(!res)beginen = 0;i = 0;endelsebeginif(i == num)beginen = 0;endelsebeginen = 1;i = i + 1;endend
end
endmodule
5,顶层设计模块
将几个模块进行汇总,并通过分路器进行判断
//assign clk = (in == 1)?clk1:clk2;
//在这个语句中,如果输入为1,则使用clk1这个时间频率,输入为0,则使用clk2这个时间频率。
module _z_f(CLK,clk1,clk2,clk_led,in,res,c,xs,led);
input CLK,clk1,clk2,res,clk_led,in;
output c;
output [2:0]xs;
output [7:0]led;
wire clk;
assign clk = (in == 1)?clk1:clk2;//分路器
_f(CLK,res,en); //分频器
_z(clk,clk_led,res,en,c,xs,led);//总模块
endmodule
这个就是实现在一秒的时间,用计数器计数要算的频率的数量,然后输出在显示器上。