搜索
bottom↓
回复: 11

求教一个VHDL算法问题

[复制链接]

出0入0汤圆

发表于 2010-7-23 11:04:35 | 显示全部楼层 |阅读模式
X:已知的整数.

n:X转换成二进制的最小位数n.

求Z:  Z=2的n次方.

如X=10(十进制), 转换成二进制"1010"最小4位       Z=2的4次方 =8.
  X=100(十进制), , 转换成二进制"1100100"最小7位   Z=2的7次方 =128.

有空的朋友帮想想,谢谢.

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

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

出0入0汤圆

 楼主| 发表于 2010-7-23 11:09:47 | 显示全部楼层
我暂用的方法是判断X大小选取Z的值,没算

出0入0汤圆

发表于 2010-7-23 11:45:16 | 显示全部楼层
把数据送进去,比如16位,从最高位查到为'1'就是对应的数据16-k位

出0入0汤圆

 楼主| 发表于 2010-7-23 12:20:33 | 显示全部楼层
3KU
再或上K位1 应该可行 我试试

出0入0汤圆

发表于 2010-7-23 12:51:28 | 显示全部楼层
等待结果

出0入0汤圆

 楼主| 发表于 2010-7-23 13:41:36 | 显示全部楼层

(原文件名:20100723132733687.jpg)


(原文件名:20100723132748765.jpg)

正在调这个DDA两轴直线插补模块原型 开源给你们参考 你们调好了的话发个给我!哈   我发的这个暂时不能用

这电路由于输出信号延时会产生多毛刺 看仿真波形,用D触发器将CLK延时的话能消.期待更好的方法.  

其中m就是一楼我要的Z值 m一个和积分有关的数,能改变整个周期,就是XY进给速度和m有关.



library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity DDA is
--generic (n : natural := 32);
port (
Xe            : in STD_LOGIC_VECTOR (31 DOWNTO 0);
Ye            : in STD_LOGIC_VECTOR (31 DOWNTO 0);
n            : in STD_LOGIC_VECTOR (31 DOWNTO 0);
Clock,rest    : in std_logic;
Xout          : out std_logic;
Yout          : out std_logic);

end entity DDA;

architecture maxcpld of DDA is
SIGNAL Jrx : STD_LOGIC_VECTOR (31 DOWNTO 0);
SIGNAL Jry : STD_LOGIC_VECTOR (31 DOWNTO 0);
SIGNAL Jvx : STD_LOGIC_VECTOR (31 DOWNTO 0);
SIGNAL Jvy : STD_LOGIC_VECTOR (31 DOWNTO 0);
SIGNAL m   : STD_LOGIC_VECTOR (31 DOWNTO 0);   
SIGNAL c   : STD_LOGIC_VECTOR (31 DOWNTO 0);
SIGNAL d   :  std_logic;
begin

process (Clock,rest) is
begin
if(rest='1')then
Jrx <= "00000000000000000000000000000000";
Jry <= "00000000000000000000000000000000";
m <= n;
Jvx <= Xe;
Jvy <= Ye;
d <='0';
elsif rising_edge(Clock) then
   
        if (c/=m)then
            c<=c+1;
            
                if((jvx+jrx)>=m )then
                jrx<=jvx+jrx-m;
                       
                        Xout<='1';
               
                else
                jrx<=jvx+jrx;
                Xout<='0';
                end if;
       
                if((jvy+jry)>=m )then
                jry<=jvy+jry-m;
                 
                        Yout<='1';
               
               
                else
                jry<=jvy+jry;
                Yout<='0';
                end if;
        else
        Yout<='0';
        Xout<='0';
        end if;
end if;
end  process;

end maxcpld;




D (原文件名:1.jpg)


m (原文件名:2.jpg)


m (原文件名:3.jpg)

出0入0汤圆

发表于 2010-7-23 13:48:31 | 显示全部楼层
毛刺好像都在CLOCK上升沿产生的呀
大哥帮我看看我这个问题吧?http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4167686&bbs_page_no=1&bbs_id=9999

出0入0汤圆

发表于 2010-7-23 16:00:52 | 显示全部楼层
回复【5楼】40130064

(原文件名:20100723132733687.jpg)
引用图片


(原文件名:20100723132748765.jpg)
<center><a class=tt16 onclick="fnquickimagequote(this,'files_31/ourdev_570202.jpg','原文件名:20100723132748......
-----------------------------------------------------------------------

你用一个相位与CLK相差90度的时钟打一下XP YP就没有毛刺了,如果宽度有要求,再用180度时钟复位它

出0入0汤圆

发表于 2010-7-23 18:45:09 | 显示全部楼层
如果只是 要 找

X:已知的整数 (应该是无符号整数吧).

n:X转换成二进制的最小位数n.

求Z:  Z=2的n次方.

用 for 要好一些。

ps : 2 4 次方 为 16, 你搞错了

-----------------------------------

z : out std_logic_vector(0 to 32);

x : in std_logic_vector(0 to 31);

process(x)
  variable z_tmp : std_logic_vector( 0 to 32 );
begin
   
  z_tmp := (others =>'0');
  
  for i in 0 to 31 loop
    if ( x(i) = '1' ) then
      z_tmp(i) := '1';
      exit;
    end if;
  end loop;
   
  z <= z_tmp;

end process;

出0入0汤圆

 楼主| 发表于 2010-7-23 19:24:56 | 显示全部楼层
nice
应该是最好方法了

出0入0汤圆

发表于 2010-8-17 22:58:19 | 显示全部楼层
2楼的方法不错

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 17:29

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

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