Q&A: filter-不同ISE软件版本之间VHDL程序的运行

博客围绕不同ISE软件版本运行VHDL程序展开。有人反馈第二章混频器例子在ISE13.4下运行报错,调用Matlab生成数据报错,且书与软件数据位宽不符。解答指出可能是文件路径问题,需修改代码;不同版本软件和目标器件,IP核需重新生成;还解释了数据位宽差异原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

不同ISE软件版本之间VHDL程序的运行  

 

问:

第二章给的混频器的例子,在ISE13.4下根本运行不了
调用matalb生成的数据memroy数据,会报错
而且书上说数据宽度是10位,实际软件上却用的16位

答:

  收到你的邮件后,我又将光盘中第二章的混频器例子进行了运行检查。运行一切正常,没有问题。并且书中所有的实例程序都是由我精心编写,且通过功能仿真及时序仿真。实际上,大部分程序可以直接在工程设计中使用。
  你所说的“调用matalb生成的数据memroy数据,会报错”的问题,不知报错提示是什么?我猜测是下面的错误提示:
??? Error using ==> fprintf
Invalid file identifier -1.
Error in ==> E2_4_SimSigPrduce at 23
fprintf(fid,'memory_initialization_radix = 10;\r\n');
错误信息是指使用“fprintf”命令时出错,原因可能是你没有建立文件存放路径中的文件夹。只需将代码fid=fopen('d:\DuYong\E2_4_SinIn.coe','w');修改为“fid=fopen('d:\E2_4_SinIn.coe','w');”即可正确运行。关于本书的使用方法,请参见本书前言中的“如何使用本书”部分内容。
 
关于“第二章给的混频器的例子,在ISE13.4下根本运行不了”的问题,可能原因为:
  你使用的是ISE13.4版本,本书所有实例均是使用ISE14.7编写的。通常来讲,由于更换了软件版本,程序中的IP核需要重新生成一下,才能正确运行。不仅如此,在ISE中,即使同一个工程,在采用不同目标器件进行实现时,所用到的IP核通常都需要重新生成,才能正确运行。
 
关于 而且书上说数据宽度是10位,实际软件上却用的16位 的问题
  书上说的数据位宽10位,指的是输入信号及本振信号的位数。在二进制运算中,两个10位数相乘,需要用20位才能实现全精度运算,因此,输出采用了20位。
                                 杜勇

Xilinx ISE是一款流行的FPGA设计工具。使用ISE编写VHDL代码可以实现各种功能。以下是一些用VHDL编写的示例代码: 1. 具有时序逻辑的计数器:该计数器可以在时钟触发下递增,并在达到特定计数器时触发输出。 ```vhdl entity counter is Port ( clk : in std_logic; reset : in std_logic; count : out std_logic_vector (3 downto 0)); end counter; architecture Behavioral of counter is signal reg_count : std_logic_vector(3 downto 0); begin process(clk, reset) begin if (reset = '1') then reg_count <= (others => '0'); elsif (rising_edge(clk)) then if (reg_count = "1001") then reg_count <= (others => '0'); else reg_count <= reg_count + 1; end if; end if; end process; count <= reg_count; end Behavioral; ``` 2. 带有并行访问的ROM:该ROM可以在指定地址位置检索数据。 ```vhdl entity rom is Port ( addr : in std_logic_vector(5 downto 0); q : out std_logic_vector(7 downto 0)); end rom; architecture Behavioral of rom is type rom_array is array(0 to 63) of std_logic_vector(7 downto 0); constant rom_data : rom_array := ( "00000001", "00000010", "00000011", ... "11111101", "11111110", "11111111" ); begin q <= rom_data(to_integer(unsigned(addr))); end Behavioral; ``` 3. 通过乘法器实现的低通滤波器:该滤波器可以通过去除高频成分来平滑输入信号。 ```vhdl entity low_pass_filter is Port ( clk : in std_logic; reset : in std_logic; filter_in : in std_logic_vector(7 downto 0); filter_out : out std_logic_vector(7 downto 0)); end low_pass_filter; architecture Behavioral of low_pass_filter is signal reg_x : std_logic_vector(7 downto 0); signal reg_y : std_logic_vector(15 downto 0); begin process(clk, reset) begin if (reset = '1') then reg_x <= (others => '0'); reg_y <= (others => '0'); elsif (rising_edge(clk)) then reg_x <= filter_in; reg_y <= std_logic_vector(unsigned(reg_x) * 65535 + unsigned(reg_y)); end if; end process; filter_out <= std_logic_vector(unsigned(reg_y) / 65535); end Behavioral; ``` 这些示例代码可以用于学习和实践VHDL设计。对于更复杂的设计,还需要使用其他工具和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜勇老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值