完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 黑桃ACE 于 2017-2-12 18:39 编辑
二进制码转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 <= 5'd0; state <= s0; binTemp <= bin; bcdTemp <= 32'd0; end else begin case(state) s0: begin cnt <= 5'd0; state <= s1; binTemp <= bin; bcdTemp <= 32'd0; end s1: begin if (cnt <= 23) begin cnt <= cnt + 1'b1; binTemp <= binTemp << 1; bcdTemp <= {bcdTemp[30:0],binTemp[23]}; // {bcdTemp,binTemp} <= {bcdTemp[30:0],binTemp,1'b0}; state <=s2; end else begin cnt <= 5'd0; binTemp <= binTemp << 1; bcdTemp <= {bcdTemp[30:0],binTemp[23]}; state <=s3; end end s2: begin bcdTemp[3:0] <= (bcdTemp[3:0] > 4'd4) ? bcdTemp[3:0] + 4'd3 : bcdTemp[3:0] ; bcdTemp[7:4] <= (bcdTemp[7:4] > 4'd4) ? bcdTemp[7:4] + 4'd3 : bcdTemp[7:4] ; bcdTemp[11:8] <= (bcdTemp[11:8] > 4'd4) ? bcdTemp[11:8] + 4'd3 : bcdTemp[11:8] ; bcdTemp[15:12] <= (bcdTemp[15:12] > 4'd4) ? bcdTemp[15:12] + 4'd3 : bcdTemp[15:12]; bcdTemp[19:16] <= (bcdTemp[19:16] > 4'd4) ? bcdTemp[19:16] + 4'd3 : bcdTemp[19:16]; bcdTemp[23:20] <= (bcdTemp[23:20] > 4'd4) ? bcdTemp[23:20] + 4'd3 : bcdTemp[23:20]; bcdTemp[27:24] <= (bcdTemp[27:24] > 4'd4) ? bcdTemp[27:24] + 4'd3 : bcdTemp[27:24]; bcdTemp[31:28] <= (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,记得有个算法叫左移加三法,你可以搜一下
|
|
|
|
|
|
|
|
查表吧,如果两位数的话也就10种情况,占不了多少资源
|
|
|
|
左移加三 循环
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
838 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1040 浏览 0 评论
871 浏览 0 评论
1906 浏览 0 评论
482 浏览 0 评论
1289 浏览 28 评论
5471 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 12:31 , Processed in 0.464321 second(s), Total 48, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号