verilog如何实现十进制数按个位十位拆开?
二进制码转BCD码,可以看看下面这段代码://==================================================================================================
// Filename : bin2bcd.v
// Created On : 2017-01-02 20:54:28
// Last Modified : 2017-01-03 14:28:27
// Revision :
// Author :
// Email : zeng4long@qq.com
//
// Description :
//
//
//==================================================================================================
`timescale 1ns / 1ps
module bin2bcd (
input clk,
input rst_n,
input [23:0] bin,
output reg [3:0] bcdU,
output reg [3:0] bcdT,
output reg [3:0] bcdH,
output reg [3:0] bcdTh,
output reg [3:0] bcdTth,
output reg [3:0] bcdHth,
output reg [3:0] bcdMill,
output reg [3:0] bcdTmill
);
reg [2:0] state;
reg [4:0] cnt;
reg [23:0] binTemp;
reg [31:0] bcdTemp;
parameter s0 = 3'd0;
parameter s1 = 3'd1;
parameter s2 = 3'd2;
parameter s3 = 3'd3;
always @ (posedge clk ) begin
if (!rst_n) begin
cnt 4'd4) ? bcdTemp[3:0] + 4'd3 : bcdTemp[3:0] ;
bcdTemp[7:4] 4'd4) ? bcdTemp[7:4] + 4'd3 : bcdTemp[7:4] ;
bcdTemp[11:8] 4'd4) ? bcdTemp[11:8] + 4'd3 : bcdTemp[11:8] ;
bcdTemp[15:12] 4'd4) ? bcdTemp[15:12] + 4'd3 : bcdTemp[15:12];
bcdTemp[19:16] 4'd4) ? bcdTemp[19:16] + 4'd3 : bcdTemp[19:16];
bcdTemp[23:20] 4'd4) ? bcdTemp[23:20] + 4'd3 : bcdTemp[23:20];
bcdTemp[27:24] 4'd4) ? bcdTemp[27:24] + 4'd3 : bcdTemp[27:24];
bcdTemp[31:28] 4'd4) ? bcdTemp[31:28] + 4'd3 : bcdTemp[31:28];
state <= s1;
end
s3: begin
state <= s0;
end
default: begin
state <= s0;
end
endcase
end
end
always @ (posedge clk) begin
if (!rst_n) begin
bcdU <= 4'd0;
bcdT <= 4'd0;
bcdH <= 4'd0;
bcdTh <= 4'd0;
bcdTth <= 4'd0;
bcdHth <= 4'd0;
bcdMill <= 4'd0;
bcdTmill <= 4'd0;
end
else if((cnt == 5'd24) && (state == s2)) begin
bcdU <= bcdTemp[3:0];
bcdT <= bcdTemp[7:4];
bcdH <= bcdTemp[11:8];
bcdTh <= bcdTemp[15:12];
bcdTth <= bcdTemp[19:16];
bcdHth <= bcdTemp[23:20];
bcdMill <= bcdTemp[27:24];
bcdTmill <= bcdTemp[31:28];
end
end
endmodule
verilog不能取余取模吗
二进制转bcd,记得有个算法叫左移加三法,你可以搜一下
取除、取余比较耗FPGA资源,而且编译器有时候会综合不出来
查表吧,如果两位数的话也就10种情况,占不了多少资源
左移加三 循环