verilog 简单定时器设计 回答满意可再加分。多谢!要求写出完整的程序啊

作者&投稿:芮亚 (若有异议请与网页底部的电邮联系)
求verilog简单cpu课程设计~

module clk_div(clk,out1,out2);
input clk;
output out1,out2;
reg out1,out2;
reg [31:0]cnt1,cnt2;

always @(posedge clk)begin//50MHz分频计数
if(cnt1<32'd24999999)
cnt1 <=cnt1 + 32'd1;
else
cnt1 <=32'd0;
end

always @(posedge clk)//分频后的半周期反转
if(cnt1 == 0)
out1<=~out1;

always @(posedge clk)begin//5MHz分频计数
if(cnt2<32'd4999999)
cnt2 <=cnt2 + 32'd1;
else
cnt2 <=32'd0;
end

always @(posedge clk)//20%占空比
if(cnt2 == 32'd999999)
out2<=0;
else if(cnt2 == 32'd4999999)
out2<=1;
endmodule

能发我一份吗562117091@qq.com

module Timer_Design( 
input wire clk, //时钟信号输入端;F = 1Hz P = 1s
input wire res,    //复位信号,Low Active低有效
input wire [1:0] data,   //定时模式[长短]选择
output  reg x       

);
/*******************************功能描述***************************
data = 2'b00 -> 无定时, 告警信号X一直为0
data = 2'b01 -> 5s定时, 告警信号X保持6s的高,但是5s就会输出一个
    告警,这个有一点冲突
data = 2'b10 -> 10s定时,每隔10s输出一个告警信号,告警信号保持6s
data = 2'b11 -> 15s定时,每隔15输出一个告警有效信号
******************************************************************/

//这里有一个不明确的地方,是否定时是一直在运行,如果一直在运行定时,那么第一个假设定时时间是5s
//5s到了之后告警信号拉高,此时定时清零继续运行,告警信号要保持6s的高,那么5s定时到的时候告警信
//号依旧是高,以此循环,5S定时的话X会一直保持高。

//另外一种情况是定时一直在运行,但是X持续高时间需要低于定时周期5s
//第三种可能是定时不一直运行,定时到5s之后,X输出6s的高,此时定时是停止的,6s之后重新开始定时
//但是这个定时周期的定义就有问题了

//所以考虑以上情况,我选择第二种,将X持续时间缩短到3s
reg [3:0] timer_cnt;
always @(posedge clk,negedge res) begin
if(!rss) begin
x <= 1'b0;
timer_cnt <= 4'd0;
end
else case(data)
2'b00 : begin
x <= 1'b0;
timer_cnt <= 4'd0;
end
2'b01 : begin //定时5s
if(timer_cnt <= 4'd1) begin
x <= x; //刚开始定时的时候不能将之拉高,所以这里用保持
timer_cnt <= timer_cnt + 1'b1;
end
else if(timer_cnt <= 4'd3) begin
timer_cnt <= timer_cnt + 1'b1;
x <= 1'b0;
end
else begin //timer_cnt = 4
timer_cnt  <= 4'd0;
x <= 1'b1;
end
end

2'b10 : begin //定时10
if(timer_cnt <= 4'd1) begin //x保持3s的高
x <= x;  //刚开始定时的时候不能将之拉高,所以这里用保持
timer_cnt <= timer_cnt + 1'b1;
end
else if(timer_cnt <= 4'd8) begin
timer_cnt <= timer_cnt + 1'b1;
x <= 1'b0;
end
else begin //timer_cnt = 9
timer_cnt  <= 4'd0;
x <= 1'b1;
end
end

2'b11 : begin //定时15
if(timer_cnt <= 4'd1) begin //x保持3s的高
x <= x;  //刚开始定时的时候不能将之拉高,所以这里用保持
timer_cnt <= timer_cnt + 1'b1;
end
else if(timer_cnt <= 4'd13) begin   //cnt = 2~(14-1)
timer_cnt <= timer_cnt + 1'b1;
x <= 1'b0;
end
else begin //timer_cnt = 14
timer_cnt  <= 4'd0;
x <= 1'b1;
end
end
            default :;
endcase
end

endmodule





有问题可以补充。。。




源汇区18264299877: verilog 简单定时器设计 回答满意可再加分.多谢!要求写出完整的程序啊 -
一秀双汰: module Timer_Design(input wire clk, //时钟信号输入端;F = 1Hz P = 1sinput wire res, //复位信号,Low Active低有效input wire [1:0] data, //定时模式[长短]选择output reg x); /*******************************功能描述***************************...

源汇区18264299877: 求用Verilog Hdl程序编写个计时5秒的计时器... -
一秀双汰: always@ (posedge clk or negedge rst) if(rst) begin s5<=0 ; count<=0 ;end elsebeginif(count<n) begin count<=count+1; s5<=0; end else begin s5<=1; count<=0; end 这是一段最简单易理解的代码,不过需要选择一个合适CLK ,然后给N赋值,最终通过数CLK多少周期输出5S计时信号;例如clk如果为100Mhz,它的周期是10ns,此时需要500000000个计数周期,输出一个S5的上升沿脉冲,表示5S计时到.

源汇区18264299877: 如何用比较简单的Verilog代码实现电子时钟设计,只要能复位和调节小时和分针就可以 -
一秀双汰: #include"stdio.h" main() { int max,x,k=1; printf("Please input:\n"); do { scanf("%d",&x); if(k==1) {max=x;k=2;} else if(x>max) max=x; }while(getchar()!='\n'); printf("max=%d\n",max); } 用来将依次输入的整数取最小的数输出.用回车结束,...

源汇区18264299877: 用Verilog编写16位定时/计数器的设计 -
一秀双汰: module counter16(out,count,data,load,cin,clk);output [15:0] out; output count; input [15:0]data; input load,cin,clk; reg [15:0] out; always@(posedge clk) begin if(load) out = data; else out = out+cin; end assign count=&out&cin; endmodule

源汇区18264299877: 用verilog语言编写一个20进制的定时器~~~(急)! -
一秀双汰: module counter(rstn,clk,reach); input rstn; input clk; input reach;//到达20后reach从0跳到1 reg [4:0] var; //计时变量 assign reach = var==5'd19; always@(posedge clk or negedge rstn) begin if(~rstn) var <= 5'h0; else if (var == 5'd19) var <= 5'h0; else var <= var + 1; end endmoudle

源汇区18264299877: 用verilog HDL进行倒计时器的设计
一秀双汰: module de_counter (count, clk, reset); //8位倒计时器 output [7:0] count; input clk, reset; reg [7:0] count; always @ (posedge clk or negedgereset) if (!reset) count = 8'h00; else count &lt;= count - 1'b1; endmodule

源汇区18264299877: 求一个定时器的verilog HDL语言,就是能在每6小时就会给出一个报警信号. -
一秀双汰: //6小时就是6*3600秒// 时钟按50mhz 那么周期数 =6*3600*50*1000000=1 080 000 000 000//考虑计数器 2^41 = 2 199 023 255 552 input clk; input rst; output sos; //报警,高电位有效 reg [40:0] cnt; //6小时计数器 always @(posedge clk or ...

源汇区18264299877: 用VerilogHDL设计一个FPGA定时器! -
一秀双汰: 首先说明:这很容易.前面说了那么多正弦波整形、PLL什么的,和HDL代码无关啊~ 这个设计无非就是个分频器.从100M的时钟得到其8,16,128分频,占空比50%,用计数器实现即可.你不会还要给你写好代码吧~没那么多时间~

源汇区18264299877: 简易数字钟设计Verilog -
一秀双汰: 直接verilog代码就可以了吧? 以前写的一个代码,供参考. module clock(clk,rst,set, set_typ, set_data, yr, mon, dt, hr, min, sec,alarm_en, alm_typ, alm_yr, alm_mon, alm_dt, alm_hr, alm_min, alm_sec, alarm_output); input clk,rst,set; input [2:0] set_...

源汇区18264299877: 怎样用verilog语言编写以秒为单位的计时器 ,让两个数码管显示.请求指点,谢谢啦 -
一秀双汰: 不知道你的主时钟频率是多少,假如是主时钟CLK是50Mhz的话,你就用计数器:计数到(50,000,000/2)-1的时候,clk<=~clk, clk就是一秒的脉冲. 1Hz

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网