编号的后6位是固定的6位数,新增一条自动+1,高位补0的实现

本文介绍了一种用于生成6位递增编号的方法。该方法通过解析输入的字符串编号,自动生成下一个递增的编号,并确保编号始终为6位整数。此技术适用于需要连续编号的业务场景。

项目中遇到一个业务情况,编号递增且是6位整数。代码自动生成,具体的实现方法如下:
public static String maxRuleCode(String code) {
String maxcode = “”;
if(code == null){
maxcode = “QRC000001”;
} else {
int parseInt = Integer.parseInt(code.substring(3, 9)) + 1;
maxcode =”QRC” + String.format(“%6d”, parseInt).replace(” “, “0”);
}
return maxcode;
}

module st7789_spi ( input clk_5mhz , // 5MHz系统时钟(来自PLL) input rst_n , // 低电平有效复 input sda_start , // 命令发送启动信号(来自init模块) input [8:0] data_in , // 9命令(1标志+8位数据,来自init模块) output reg sda_end , // 发送完成反馈信号(给init模块) output reg spi_sclk , // SPI时钟(输出到ST7789) output reg spi_mosi , // SPI数据输出(输出到ST7789) output reg spi_cs , // SPI片选(低电平有效,输出到ST7789) output reg dc , // 数据/命令选择(高=数据,低=命令,输出到ST7789) output reg spi_busy // 新增:SPI忙状态(高=正在传输,低=空闲,给init模块) ); reg [3:0] bit_cnt; // 计数器(0~8,共9位数据) reg [1:0] state; // 状态机:IDLE(0)、TRANSFER(1)、DONE(2) reg [8:0] data_buf; // 数据缓存(锁存data_in,避免传输中数据变化) // 状态定义(与原逻辑一致) localparam IDLE = 2'b00, TRANSFER = 2'b01, DONE = 2'b10; // 主状态机 + spi_busy 逻辑(核心修改:将spi_busy与状态绑定) always @(posedge clk_5mhz or negedge rst_n) begin if (!rst_n) begin state <= IDLE; // 复后进入空闲状态 spi_cs <= 1'b1; // 片选拉高(未选中设备) spi_sclk <= 1'b0; // SPI时钟空闲低(CPOL=0) spi_mosi <= 1'b0; // 数据输出默认低 dc <= 1'b0; // 默认命令模式 sda_end <= 1'b0; // 发送完成标志复 bit_cnt <= 4'd0; // 计数器复 data_buf <= 9'd0; // 数据缓存复 spi_busy <= 1'b0; // 复后空闲(busy=0) end else begin case (state) // 空闲状态:等待init模块的sda_start信号 IDLE: begin sda_end <= 1'b0; // 清除完成标志 spi_busy <= 1'b0; // 空闲状态→busy=0 if (sda_start) begin // 检测到init模块的启动信号 spi_cs <= 1'b0; // 拉低片选,选中ST7789 data_buf <= data_in; // 锁存9命令(避免传输中data_in变化) dc <= data_in[8]; // 提取命令/数据标志(最高位) bit_cnt <= 4'd8; // 从最高位(第8)开始发送 state <= TRANSFER; // 进入传输状态 spi_busy <= 1'b1; // 进入传输→busy=1(通知init模块已接收命令) end end // 传输状态:逐发送9位数据(CPHA=0,上升沿发送) TRANSFER: begin spi_busy <= 1'b1; // 传输中→busy=1(持续拉高) // 修复括号不匹配问题,增边界判断(假设bit_cnt从高位开始,如7→0) if (bit_cnt > 4'd0) begin spi_sclk <= ~spi_sclk; // 翻转SPI时钟 // 时钟下降沿发送数据(符合SPI时序规范) if (!spi_sclk) begin spi_mosi <= data_buf[bit_cnt - 1'b1]; // 提前准备下一位数据 end // 时钟上升沿更新计数器(确保数据稳定) else begin bit_cnt <= bit_cnt - 3'd1; // 计数器减1 end end // 所有传输完成(bit_cnt减到0) else begin state <= DONE; // 进入完成状态 end end // 完成状态:结束传输,反馈完成信号 DONE: begin spi_cs <= 1'b1; // 拉高片选,释放设备 sda_end <= 1'b1; // 置高完成标志(通知init模块) spi_busy <= 1'b0; // 传输完成→busy=0(回到空闲) state <= IDLE; // 回到空闲状态,等待下一条命令 end endcase end end endmodule
最新发布
10-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值