首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教如何获得integer类型数据的各位值

请教如何获得integer类型数据的各位值

请教如何获得integer类型数据的各位值


例如
一个integer数为 123456,如何才能实现这样一个数组,使得a(0)=1,a(1)=2,a(2)=3,a(3)=4...
即取出该integer数的各位数字。


要求能够综合


谢谢!

lz的integer数据如何输入到硬件中,输入应当是一位对应一位,即满足了a(0)=1,a(1)=2,a(2)=3,a(3)=4
用权值转换,10进制数的一些基本运算
具体算法可以自己设计
www.5iFPGA.com
用除法和取模运算很容易得到你想要的结果.不过有些问题:
有的综合器不支持整型,有的综合器要求这两个运算符的右边都必须是2的整次方,不知道没有这方面的设置或者补丁;
我想了个比较笨的方法,以387为例:
1.用387不停的减100,直到结果小于100为止,减操作的次数就是3;
2.上一步剩下的数不停减10,直到结果小于10为止,减操作的次数就是8;
3.上一步剩下的数不停减1,直到结果小于等于1为止,减操作的次数就是7;
我有时间写一个发上来,希望有高手有更好的方法实现
美梦成真-->噩梦降临!
我写了一个转换的程序,仅供大家参考,希望大家有更好的思路和实现
//以三位十进制数为例(387)
module calculate(clk,reset,value_baiwei,value_shiwei,value_gewei);
input clk;
input reset;
output [3:0] value_baiwei;//百位数
output [3:0] value_shiwei;//十位数
output [3:0] value_gewei;//个位数
integer my_integer=387;
reg [3:0] counter_baiwei;
reg [3:0] counter_shiwei;
reg [3:0] counter_gewei;
reg [9:0] my_integer_temp;
assign value_baiwei = counter_baiwei;
assign value_shiwei = counter_shiwei;
assign value_gewei = counter_gewei;
always@(posedge clk or posedge reset)
begin
if(reset)
begin
my_integer_temp <= my_integer;
counter_baiwei <= 0;
counter_shiwei <= 0;
counter_gewei <= 0;
end
else
begin
if(my_integer_temp>=100)
begin
my_integer_temp <= my_integer_temp - 100;
counter_baiwei <= counter_baiwei + 1;
end
else if(my_integer_temp>=10)
begin
my_integer_temp <= my_integer_temp - 10;
counter_shiwei <= counter_shiwei + 1;
end
else if(my_integer_temp>=1)
begin
my_integer_temp <= my_integer_temp - 1;
counter_gewei <= counter_gewei + 1;
end
else
begin
my_integer_temp <= my_integer_temp;
counter_baiwei <= counter_baiwei;
counter_shiwei <= counter_shiwei;
counter_gewei <= counter_gewei;
end
end
end
endmodule
美梦成真-->噩梦降临!
因为格式问题有点乱,我发个压缩包:里面有工程文件及源代码,还有功能仿真文件
http://bbs.chinaecnet.com/uploadImages/calculate.rar
美梦成真-->噩梦降临!
返回列表