标题: 请教如何获得integer类型数据的各位值 [打印本页]
作者: shuaike 时间: 2006-4-9 10:51 标题: 请教如何获得integer类型数据的各位值
请教如何获得integer类型数据的各位值
例如
一个integer数为 123456,如何才能实现这样一个数组,使得a(0)=1,a(1)=2,a(2)=3,a(3)=4...
即取出该integer数的各位数字。
要求能够综合
谢谢!
作者: jayyi0819 时间: 2006-4-11 09:11
lz的integer数据如何输入到硬件中,输入应当是一位对应一位,即满足了a(0)=1,a(1)=2,a(2)=3,a(3)=4
作者: zhiyuh 时间: 2006-4-11 13:17
用权值转换,10进制数的一些基本运算
具体算法可以自己设计
作者: stone133 时间: 2006-4-11 15:19
用除法和取模运算很容易得到你想要的结果.不过有些问题:
有的综合器不支持整型,有的综合器要求这两个运算符的右边都必须是2的整次方,不知道没有这方面的设置或者补丁;
我想了个比较笨的方法,以387为例:
1.用387不停的减100,直到结果小于100为止,减操作的次数就是3;
2.上一步剩下的数不停减10,直到结果小于10为止,减操作的次数就是8;
3.上一步剩下的数不停减1,直到结果小于等于1为止,减操作的次数就是7;
我有时间写一个发上来,希望有高手有更好的方法实现
作者: stone133 时间: 2006-4-12 15:06
我写了一个转换的程序,仅供大家参考,希望大家有更好的思路和实现
//以三位十进制数为例(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
作者: stone133 时间: 2006-4-12 15:08
因为格式问题有点乱,我发个压缩包:里面有工程文件及源代码,还有功能仿真文件
http://bbs.chinaecnet.com/uploadImages/calculate.rar
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |