求教一个VHDL算法问题
X:已知的整数.n:X转换成二进制的最小位数n.
求Z:Z=2的n次方.
如X=10(十进制), 转换成二进制"1010"最小4位 Z=2的4次方 =8.
X=100(十进制), , 转换成二进制"1100100"最小7位 Z=2的7次方 =128.
有空的朋友帮想想,谢谢. 我暂用的方法是判断X大小选取Z的值,没算 把数据送进去,比如16位,从最高位查到为'1'就是对应的数据16-k位 3KU
再或上K位1 应该可行 我试试 等待结果 http://cache.amobbs.com/bbs_upload782111/files_31/ourdev_570201.jpg
(原文件名:20100723132733687.jpg)
http://cache.amobbs.com/bbs_upload782111/files_31/ourdev_570202.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;
endprocess;
end maxcpld;
http://cache.amobbs.com/bbs_upload782111/files_31/ourdev_570245.jpg
D (原文件名:1.jpg)
http://cache.amobbs.com/bbs_upload782111/files_31/ourdev_570246.jpg
m (原文件名:2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_31/ourdev_570247.jpg
m (原文件名:3.jpg) 毛刺好像都在CLOCK上升沿产生的呀
大哥帮我看看我这个问题吧?http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4167686&bbs_page_no=1&bbs_id=9999 回复【5楼】40130064
(原文件名:20100723132733687.jpg)
引用图片
(原文件名:20100723132748765.jpg)
<center><a class=tt16 onclick="fnquickimagequote(this,'files_31/ourdev_570202.jpg','原文件名:20100723132748......
-----------------------------------------------------------------------
你用一个相位与CLK相差90度的时钟打一下XP YP就没有毛刺了,如果宽度有要求,再用180度时钟复位它 如果只是 要 找
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; nice
应该是最好方法了 2楼的方法不错 DDA插补有意思的就是速度的控制。有适量合成速度换算成 主轴的插补速度。有空我也来研究研究。
页:
[1]