搜索
bottom↓
回复: 1

我的cic滤波器的问题?附代码

[复制链接]

出0入0汤圆

发表于 2008-3-10 10:18:38 | 显示全部楼层 |阅读模式
--------三级CIC抽取器实例--------
library IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cic3_decimator IS
   GENERIC (
      STATE_HOLD                     :  bit := '0';   
      STATE_SAMPLE                   :  bit := '1');   
   PORT (
      clk                     : IN bit;   --输入时钟
      x_in                    : IN std_logic_vector(7 DOWNTO 0);   --输入8位数据
--     ComReg3                  : inout std_logic_vector(25 DOWNTO 0);   
     y_out                   : OUT std_logic_vector(25 DOWNTO 0));   --输出26位数据
END cic3_decimator;

ARCHITECTURE translated OF cic3_decimator IS

-----------定义xhdl_2的类型
   TYPE xhdl_2 IS ARRAY (2 DOWNTO 0) OF std_logic_vector(25 DOWNTO 0);

   SIGNAL state                    :  bit;   
   SIGNAL derived_clk              :  bit;   ---下采样后的十时钟
   SIGNAL counter                  :  std_logic_vector(4 DOWNTO 0);   
   SIGNAL sxtx                     :  std_logic_vector(25 DOWNTO 0);   
   SIGNAL x                        :  std_logic_vector(7 DOWNTO 0);   
   SIGNAL IntReg                   :  xhdl_2;   
   SIGNAL ComReg0                  :  xhdl_2;   
   SIGNAL ComReg1                  :  xhdl_2;   
   SIGNAL ComReg2                  :  xhdl_2;   
   SIGNAL ComReg3                  :  std_logic_vector(25 DOWNTO 0);   
   SIGNAL y_out_xhdl1              :  std_logic_vector(25 DOWNTO 0);   

BEGIN
   y_out <= y_out_xhdl1;

----------实现下采样---------------
   FSM_DECIMATOR : PROCESS
   BEGIN
      WAIT UNTIL (clk'EVENT AND clk = '0');
      CASE state IS
         WHEN STATE_HOLD =>    ---为0时如果counter=127,则state=1
                  IF (counter = "11111") THEN
                     state <= STATE_SAMPLE;   
                  END IF;
         WHEN STATE_SAMPLE =>  ---为1时,state=0,IntReg赋值给ComReg0
                  ComReg0 <= IntReg;   
                  state <= STATE_HOLD;   
         WHEN OTHERS  =>       ---其他state=0
                  state <= STATE_HOLD;            
      END CASE;
      IF ((counter > "01000") AND (counter < "10000")) THEN  ---8<counter<16
         derived_clk <= '1';    ------生成下采样后的时钟----------
      ELSE
         derived_clk <= '0';   
      END IF;
      counter <= counter + "00001";
   END PROCESS;
---------符号扩展--------
   sxtx <= "00" & x & x & x ;

------积分器实现模块--------
   INTEGRATOR : PROCESS
   BEGIN
      WAIT UNTIL (clk'EVENT AND clk = '1');
      x <= x_in;   
      IntReg(0) <= IntReg(0) + sxtx;   
      IntReg(1) <= IntReg(1) + IntReg(0);   
      IntReg(2) <= IntReg(2) + IntReg(1);   
   END PROCESS;

--------梳状器实现模块-------
   COMB : PROCESS
   BEGIN
      WAIT UNTIL (derived_clk'EVENT AND derived_clk = '1');
      ComReg0(1) <= ComReg0(0);   
      ComReg0(2) <= ComReg0(1);   
      ComReg1(0) <= ComReg0(0) - ComReg0(2);   
      ComReg1(1) <= ComReg1(0);   
      ComReg1(2) <= ComReg1(1);   
      ComReg2(0) <= ComReg1(0) - ComReg1(2);   
      ComReg2(1) <= ComReg2(0);   
      ComReg2(2) <= ComReg2(1);   
      ComReg3 <= ComReg2(0) - ComReg2(2);   
   END PROCESS;
   y_out <= ComReg3 ;

END translated;



提示Warning (10541): VHDL Signal Declaration warning at cic3_decimator.vhd(31): used implicit default value for signal "y_out_xhdl1" because signal was never assigned a value or an explicit default value. Use of implicit default value may introduce unintended design optimizations.

出0入0汤圆

发表于 2009-10-8 11:17:27 | 显示全部楼层
正在学习滤波器,不知LZ是否突破了,呵呵!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 18:32

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

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