1873|3

58

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求大神看看这段程序啊 [复制链接]


  1. --当一组数据来到时,要求检测到55、AA两个字节,然后把两个字节后边的N个字节保存下来
  2. --这段程序我检测到55、aa两个数据后,拉高一个标志位falg,然后对rdsig计数N后,再拉低标志位
  3. --然后在下一模块,当标志位为1时,保存数据

  4. library ieee;
  5. use ieee.std_logic_1164.all;
  6. use ieee.std_logic_unsigned.all;

  7. entity frametest is
  8. port(
  9.         datain:in std_logic_vector(7 downto 0);
  10.         rdsig :in std_logic;                        --高电平时,一个字节的数据来到
  11.         flag  :out std_logic;                        --检测到帧头后,帧数据的长度
  12. );

  13. end entity frametest;

  14. architecture behav of frametest is
  15.         constant N:integer:=10;
  16.         constant framehead1:std_logic_vector(7 downto 0):="01010101";
  17.         constant framehead2:std_logic_vector(7 downto 0):="10101010";
  18.         signal cnt:integer:(0 to N+1);
  19. begin
  20.         process(rdsig)
  21.                 cin:integer:(0 to 1);
  22.         begin
  23.            if rising_edge(rdsig) then
  24.                 IF framehead1=datain then
  25.                         cin:=1;
  26.                 ELSIF cin=1 and framehead2=datain then
  27.                         flag<='1';           --当检测到第一二两个字节为55、AA时,标志位置1
  28.                 END IF;
  29.             end if;
  30.             
  31.            if cnt=N+1 then
  32.                 flag<='0';                --当有N个数据来到后,标志位置0
  33.            end if;
  34.         end process;

  35.         process(flag,rdsig)      --对flag的长度计数
  36.         begin
  37.                 if falling_edge(rdsig) then        --有数据到来
  38.                         if flag='1' then
  39.                                 cnt<=cnt+1;        --数据个数加1        
  40.                         elsif flag='0' then
  41.                                 cnt<=0;
  42.                         end if;
  43.                 end if;
  44.         end process;
  45. end behav;
复制代码



现在是:我用modelsim仿真,完全没问题啊!
可是下载到fpga里就变样了,我用示波器观察的,当N=1,2,3,4,5,7,8,9,11……时,flag的长度是包含N个rdsig。
可是当N=6的时候,flag的长度为3个rdsig;当N=10的时候,flag的长度为7个rdsig。
别的数字我就没试了~~
这是为什么呢??百思不得其解啊~~
此帖出自FPGA/CPLD论坛

最新回复

  让是让,但是要尽量避免。 因为上升沿和下降沿之间传递数据的延时是时钟周期的一半,所以时序分析的时候就要做的更细一些,时序约束文件要做好。 你看下时序分析报告看是否有timing violation.   详情 回复 发表于 2015-1-6 09:48
点赞 关注
 

回复
举报

130

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
1. 你这段代码语法错误很多, modelsim编译不可能通过。
2. 从逻辑上看,混合了上升沿和下降沿两种描述,时序不知道如何保证的。 代码中错误太多无法编译。
此帖出自FPGA/CPLD论坛

点评

1.不好意思,我这是在私人电脑上打的,无法错误没有检查。 2.不同的进程里也不让用不同的时钟沿吗??为什么有些是正确的,有些不行呢??  详情 回复 发表于 2015-1-5 14:58
 
 

回复

58

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
1.不好意思,我这是在私人电脑上打的,无法错误没有检查。
2.不同的进程里也不让用不同的时钟沿吗??为什么有些是正确的,有些不行呢??
此帖出自FPGA/CPLD论坛
 
 
 

回复

130

帖子

0

TA的资源

纯净的硅(高级)

4
 

  让是让,但是要尽量避免。 因为上升沿和下降沿之间传递数据的延时是时钟周期的一半,所以时序分析的时候就要做的更细一些,时序约束文件要做好。 你看下时序分析报告看是否有timing violation.
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表