打印

请教一个VHDL问题,有代码,很简单

[复制链接]
1612|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyghj|  楼主 | 2009-3-15 16:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 

ENTITY SPDA IS
    PORT (    CLK,PHSEL0,PHSEL1    :IN STD_LOGIC;
                 SDAA    :OUT INTEGER RANGE 0 TO 127;
                 PDAA    :OUT INTEGER RANGE 0 TO 127);
END;

ARCHITECTURE BEHV OF SPDA IS
    SIGNAL PHSEL    :STD_LOGIC_VECTOR(1 DOWNTO 0);
    SIGNAL SDAA_S    :INTEGER RANGE 0 TO 127    :=0;
    SIGNAL PDAA_S    :INTEGER RANGE 0 TO 127 :=0;    
BEGIN
    PHSEL <= PHSEL1 & PHSEL0;
    PROCESS(CLK)
    BEGIN
        IF ( CLK'EVENT AND CLK='1' ) THEN
            SDAA_S <= SDAA_S+1;
            PDAA_S <= PDAA_S+1;
        END IF;
    END PROCESS;
    SDAA <= SDAA_S;
--    CASE (PHSEL) IS    
--        WHEN "00" =>
--            PDAA <= PDAA_S;        
--        WHEN "01" =>
--            PDAA <= PDAA_S+32;    
--        WHEN "10" =>
--            PDAA <= PDAA_S+64;    
--        WHEN "11" =>
--            PDAA <= PDAA_S+32;    
--    END CASE;
END BEHV;

相关帖子

沙发
lyghj|  楼主 | 2009-3-15 16:17 | 只看该作者

这是两个波形发生器的地址发生器

每个时钟上升沿地址序列加一,相位选择信号(PHSEL)控制其中的一个地址(PDAA)相对另一个地址(SDAA)可以是同相,差90度,差180度和差270度。
本人水平有限,思路是有,但在VHDL中功能仿真能过,没有办法综合。

使用特权

评论回复
板凳
lyghj|  楼主 | 2009-3-15 20:40 | 只看该作者

有答案了

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 

ENTITY SPDA IS
    PORT (    CLK,PHSEL0,PHSEL1    :IN STD_LOGIC;
                 SDAA    :OUT INTEGER RANGE 0 TO 127;
                 PDAA    :OUT INTEGER RANGE 0 TO 127);
END;

ARCHITECTURE BEHV OF SPDA IS
    SIGNAL PHSEL    :STD_LOGIC_VECTOR(1 DOWNTO 0);
    SIGNAL SDAA_S    :INTEGER RANGE 0 TO 127    :=0;
    SIGNAL PDAA_S    :INTEGER RANGE 0 TO 127 :=0;    
BEGIN
    PHSEL <= PHSEL1 & PHSEL0;
    PROCESS(CLK,PHSEL)
    BEGIN
        IF ( CLK'EVENT AND CLK='1' ) THEN
            SDAA_S <= SDAA_S+1;
            CASE (PHSEL) IS    
                WHEN "00" =>
                    PDAA_S <= SDAA_S+0;        
                WHEN "01" =>
                    PDAA_S <= SDAA_S+32;    
                WHEN "10" =>
                    PDAA_S <= SDAA_S+64;    
                WHEN "11" =>
                    PDAA_S <= SDAA_S+96;    
            END CASE;
        END IF;
    END PROCESS;
    SDAA <= SDAA_S-1;
    PDAA <= PDAA_S;
END BEHV;

使用特权

评论回复
地板
worrior_1| | 2009-3-16 11:17 | 只看该作者

请教一个VHDL问题,有代码,很简单

你最开始那个程序要翻转270应该+96吧,你下面的新程序最后    
    SDAA <= SDAA_S-1;
    PDAA <= PDAA_S;
意思是叫程序循环128次?

使用特权

评论回复
5
lyghj|  楼主 | 2009-3-16 17:01 | 只看该作者

是的,应该加96,测试时改的,发上来忘记改回去了

就是循环128次,到头后重新开始。改过的程序还有个小问题:第一个时钟周期PDAA输出有一个跳变,不过后面的周期就全部对了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

197

帖子

3

粉丝