搜索
bottom↓
回复: 7

这类数据处理用verilog语言应该如何实现

[复制链接]

出0入0汤圆

发表于 2013-6-1 20:00:00 | 显示全部楼层 |阅读模式
[我使用的是verilog语言]
想对一组8位二进制数据进行以下处理:

1.先将输入的二进制转换为十进制
2.然后分别取出其个位十位(XY)   【PS:原始数据不大于99】
3.然后再将X、Y分别用四位二进制数表示出来。



例如:输入0101_0101

1.  转为十进制=85
2.  X=8 Y=5;
3.  X=1000 Y=0101;  (输出~)

初学verilog,想问一下大家这样的数据处理应该如何实现?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-6-1 22:51:22 | 显示全部楼层
查表吧,占不了多少资源

出0入0汤圆

发表于 2013-6-1 23:23:55 | 显示全部楼层
如果对转换时间要求不高,可以用计数的方法,这样占用的资源非常少,如下:

module Hex2Dec(
        //Clocks
        iClk_40,   //Clock
        iReset_N,  //Reset
        //Hex intput
        iHex,      //Hex input
        //Decimal output
        oDigit0,   //Digit 0
        oDigit1    //Digit 1
);
/* PORT declarations
*/
//Clocks input
input          iClk_40;   //Clock
input          iReset_N;  //Reset
//Hex intput
input  [ 7: 0] iHex;      //Hex input
//Decimal output
output reg [ 3: 0] oDigit0;   //Digit 0
output reg [ 3: 0] oDigit1;   //Digit 1

/* REG/WIRE declarations
*/
reg  [ 7: 0] hexCnt; //Hex counter
reg  [ 7: 0] decCnt; //Decimal counter
wire         endOfCnt; //End of counting

/* LOGIC Descriptions
*/
//Decimal output
always @(posedge iClk_40)
        if(endOfCnt) begin
                oDigit0 <= decCnt[ 3: 0];
                oDigit1 <= decCnt[ 7: 4];
        end

//Hex down-counting
always @(posedge iClk_40 or negedge iReset_N)
        if(!iReset_N) begin
                hexCnt <= 8'h00;
        end
        else if(endOfCnt) begin
                hexCnt <= iHex;
        end
        else begin
                hexCnt <= hexCnt - 8'h01;
        end

//End of counting
assign endOfCnt = (hexCnt == 8'h00);

//Decimal up-counting
always @(posedge iClk_40 or negedge iReset_N)
        if(!iReset_N) begin
                decCnt <= 8'd0;
        end
        else if(endOfCnt) begin
                decCnt <= 8'd0;
        end
        else begin
                //Digit 0
                if(decCnt[3: 0] == 4'd9) decCnt[3: 0] <= 4'd0;
                else decCnt[3: 0] <= decCnt[3: 0] + 4'd1;

                //Digit 1
                if(decCnt[3: 0] == 4'd9) decCnt[7: 4] <= decCnt[7: 4] + 4'd1;
        end

endmodule //Hex2Dec

出0入0汤圆

 楼主| 发表于 2013-6-2 00:31:46 | 显示全部楼层
mitchell 发表于 2013-6-1 23:23
如果对转换时间要求不高,可以用计数的方法,这样占用的资源非常少,如下:

module Hex2Dec(

谢谢~我去捣鼓一下~!

出0入0汤圆

发表于 2013-6-2 09:13:18 | 显示全部楼层
给个思路,你这个最好是按 二进制转BCD码的方式,其后你可以取高4位就是了。 二进制转BCD码有专用的74IC,应该不难,查一下算法

出0入0汤圆

发表于 2013-6-2 09:37:48 | 显示全部楼层
参考这个文章 http://www.dzsc.com/data/html/2010-9-1/85277.html

出0入0汤圆

发表于 2013-6-2 09:42:45 | 显示全部楼层
就是把十进制转换为BCD码嘛!我记得书上一般会讲到的!

出0入0汤圆

发表于 2013-6-2 10:19:37 | 显示全部楼层
计数的方法好
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表