Verilog 怎么实现啊

这是一个时间收费系统
每当打开这个时间收费开关
一直会显示等待时间,但是都会等两分钟才接着继续动,因为前两分钟时间不收钱
就比如现在等待时间时10分钟,我现在按下这个开关,等两分钟之后才会计时,并且计时是从10继续开始计时的


 
module timewait (clk,reset,pluse_flag,min,time_enable);//clk为1HZ脉冲60个脉冲为1分钟
 
input clk;
input reset;
input pluse_flag;
output [7:0] min;    //输出的分
output time_enable;//输出的控制计费的信号
 
reg [7:0] min;
reg [7:0]cnt;
 
always@(posedge clk or negedge reset)//异步复位
    begin
        if(!reset)//低电平有效
            begin//复位
                min<=8'H00;
            end
        else if    (pluse_flag ==1'b1)      
            begin
                if(cnt>8'd59)//用于确定一分钟的分辨率 
                    begin 
                        cnt=0;
                            if(min[3:0]==4'B1001)//分的低四位是9
                                begin
                                    min[3:0]<=4'B0000;//清零
                                        if(min[7:4]==4'B0101)//分的高四位是5
                                            min[7:4]<=4'B0000;//清零
                                        else 
                                            min[7:4]<=min[7:4]+4'B0001;//分高四位非5加1
                                end
                            else 
                                min[3:0]<=min[3:0]+4'B0001;//分的低四位不是9加一
                    end
                else
                    begin
                        cnt=cnt+1'b1; 
                    end
            end
    end
              
assign time_enable=((min[7:0]>8'b0000_0010)?1'b1:1'b0) ;//标志位为1代表时间超过两分钟,开始计费
 
endmodule

该回答内容部分引用GPT,GPT_Pro更好的解决问题
Verilog是一种用于描述和编写电路的语言,它可以实现功能的组态,逻辑运算和控制,从而可以实现所需的功能。要实现上述的时间收费系统,可以使用Verilog来编写代码。

首先,要先定义一些输入和输出变量:clk,reset,pluse_flag,min,time_enable。clk和reset分别代表时钟信号和复位信号;pluse_flag用于表明当前是否有有效的脉冲信号;min用于表明当前的等待时间;time_enable表明当前是否可以开始计时。

module timewait (clksreset,pluse_ flagsmin,time_enable);
input clk;
input reset;
input pluse flag;
output [7:e] min;
output time_enable;

然后我们定义一个寄存器(reg)cnt ,用于存储当前的计时值。

reg [7:6] min;
reg [7:e]cnt;

接下来要写always模块,首先当复位信号为低电平时,将计时寄存器清零。如果没有复位信号,就根据脉冲信号来判断是否需要开始计时。当pluse_flag为高电平时,说明需要开始计时,此时将time_enable输出为高电平来开启计时功能;如果pluse_flag为低电平时,将time_enable输出为低电平来关闭计时功能。此外还要在计时功能开启的情况下,不断更新min的值。

alwaysB(posedge clk or negedge reset)
    begin
        if (reset ==1)  cnt <= 0;  // 当复位信号为低电平时,将计时寄存器清零
        else if (pluse_flag == 1)   // 当pluse_flag为高电平时,说明需要开始计时 
        begin 
            time_enable <=1;  // 将time_enable输出为高电平来开启计时功能
            min <= cnt;   // 更新min 的值 
            cnt <= cnt + 1;  // 计数器加1 
        end 
        else time_enable <=0; // 如果pluse_flag为低电平时,将time_enable输出为低电平来关闭计时功能
    end 

最后就是在always中定义一个if-else语句来判断当前的等待时间是否已到。如果cnt>=120说明已到2分钟了,此时把pluse_flags置为1开始新的一轮计时;如果cnt <120说明还没到2分钟,此时把pluse_flags置为0继续老的一轮计时。

if (cnt >= 120) pluse_flag <= 1;   // 若cnt>=120说明已到2分钟了 
else pluse_flag <= 0;   // 若cnt <120说明还没到2分钟 

总之,使用Verilog代码实现上述的时间收费系统包括定义变量、定义寄存器、写always模块和写if-else语句四部分。
如果回答有帮助,望采纳。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^