集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: fpgaw

至芯科技【夏宇闻教授专栏】与你一起搞定FPGA设计!

[复制链接]
玻色子 发表于 2012-3-17 11:14:43 | 显示全部楼层
回复 269# 夏宇闻
因为在我的整个设计中对时间要求是很高的,至少要再几十ns之内完成计算,而我所用到的时钟周期是400M的,所以这样的话如果用一百个时钟周期肯定时间是太长了,如果综合考虑的话,我应该怎么去实现?
夏宇闻 该用户已被删除
夏宇闻 发表于 2012-3-17 19:46:46 | 显示全部楼层
本帖最后由 夏宇闻 于 2012-3-17 20:05 编辑
回复  夏宇闻
因为在我的整个设计中对时间要求是很高的,至少要再几十ns之内完成计算,而我所用到的时钟周 ...
玻色子 发表于 2012-3-17 11:14

把一百个寄存器分十段每段10个寄存器,每段中1的个数用4比特表示,再做一个十个加数连加的七位加法器。十个时钟就可算出所有十段中每段的1的个数,再用1到十个时钟就可求出十段总的1的个数。具体分段电路要视FPGA中最高时钟频率速而定。直接做一个100层7位加法器也可以试一试,看看要用掉多少资源,完成一次计算可能要用几十个纳秒?如果片子大,很快就能完成设计任务。
lanpad 发表于 2012-3-18 21:23:03 | 显示全部楼层
本帖最后由 lanpad 于 2012-3-18 21:25 编辑

夏老师,您好!
向您请教一个上升沿同步的两个信号为何在上升沿处输出结果不一致的问题
如图所示:

clk33M为时钟信号
clk_en为使能信号
在红圈处clk33M与clk_en的上升沿精确对准
可是当程序如下时:
例:
always@(posedge clk33M) begin
    if(clk_en) begin
         xxxxxxxxx
    end
end
注:clk33M和使能信号clk_en均由另一高倍时钟clk100M驱动产生,二者上升沿精确对准。
程序中的“xxxxxxxxx”操作无法完成,貌似clk33M的上升沿无法捕获clk_en

但是,
另一些程序里(不同的情形太多,不再举例子,只说明最相关的两个信号的情况),同样的情形,当clk33M与clk_en的上升沿精确对准时,在有些程序中上例中的操作是可以完成的,好像clk33M的上升沿又可以捕获clk_en。

试了许多不同的情况,总结不出规律,请问这是什么原因?谢谢!

注:以上均为Modelsim前仿真的结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
夏宇闻 该用户已被删除
夏宇闻 发表于 2012-3-19 06:29:11 | 显示全部楼层
本帖最后由 夏宇闻 于 2012-3-19 06:39 编辑
夏老师,您好!
向您请教一个上升沿同步的两个信号为何在上升沿处输出结果不一致的问题
如图所示:

cl ...
lanpad 发表于 2012-3-18 21:23

触发器翻转需要有足够的建立时间和保持时间才能实现。您描述的情况必定出现问题,因为建立时间不可能得到满足,虽然保持时间可以满足要求。您必须认真读几遍我编写的书,深入理解阻塞赋值和非阻塞赋值的不同,才能理解这个现象。
yuexinwei 发表于 2012-3-20 11:06:26 | 显示全部楼层
夏老师您好:我想下面的这个程序中for循环语句执行的起止地方在哪??是只执行z[i]=0;还是执行z[i]=0;和z[10:3];还是执行第一个begin...and之间的所有代码???先在这谢谢老师了!!
module two_BCD(       //二进制码转BCD码
    input [7:0] b,
    output reg[9:0] p
    );
reg [17:0] z;
integer i;
always@(*)
begin
  
  for(i=0;i<=17;i=i+1)
                z[i]=0;
        z[10:3]=b;//将输入的值存到一个18位的变量中。
        repeat(5)
         begin
          if(z[11:8]>4)
              z[11:8]=z[11:8]+3;//判断加3
        if(z[15:12]>4)
              z[15:12]=z[15:12]+3;
                        z[17:1]=z[16:0];
         end
         p=z[17:8];
end

endmodule
夏宇闻 该用户已被删除
夏宇闻 发表于 2012-3-21 20:28:23 | 显示全部楼层
夏老师您好:我想下面的这个程序中for循环语句执行的起止地方在哪??是只执行z=0;还是执行z=0;和z[10:3];还 ...
yuexinwei 发表于 2012-3-20 11:06

就这个程序而言For循环只执行一条语句,即把z的每一位都置0。这条程序您从哪里抄来?写得不好,是不可综合的,也不好理解,也许还是错误的。您要根据二进制与BCD码的转换关系,认真思考后自己重新编写,并且要用在转换范围内的每个二进制数验证转换是否正确。
yuexinwei 发表于 2012-3-22 09:40:14 | 显示全部楼层
谢谢,老师 ,我有个spartan3E的开发板,是这个开发板配套的书上的。最近两个星期来,都是在板子上实现一些简单的程序,比如多路选择器、译码器、编码器、控制LED显示、计数器显示和有限状态机的实现。。上面的这个例子在综合是出现了警告!!!!我买了您的一本Verilog数字系统设计教程,看了几遍了,感觉讲的挺好,夏老师您在帮忙推荐看些其他的什么书籍和提些好的学习方法???
夏宇闻 该用户已被删除
夏宇闻 发表于 2012-3-23 06:38:19 | 显示全部楼层
本帖最后由 夏宇闻 于 2012-3-23 06:48 编辑
谢谢,老师 ,我有个spartan3E的开发板,是这个开发板配套的书上的。最近两个星期来,都是在板子上实现一些 ...
yuexinwei 发表于 2012-3-22 09:40

您的学习方法是对的。学习基本语法与动手编程、仿真、下载结合起来验证自己编写的代码。但有些与开发板配套的实验代码和教材存在不少问题,不介绍仿真的重要性,语法介绍和设计方法思路都存在一些问题,需要改进。您只要认真读您已经买的书,认真做每章后的思考题和练习,到15章和16章的作业做完了您就会豁然开朗。大约需要三个月不间断的努力,才能领会我在书上早已明确指出的要点。读书认真的同学进步快,反之则慢,而且会失去进入这个行业的信心。
ddd 发表于 2012-3-26 08:35:53 | 显示全部楼层
quartus ii 中生成的 rom初始化文件有什么用呀?
夏宇闻 该用户已被删除
夏宇闻 发表于 2012-3-26 12:30:23 | 显示全部楼层
quartus ii 中生成的 rom初始化文件有什么用呀?
ddd 发表于 2012-3-26 08:35

ROM中如果没有可执行的机器码它又有什么用呢?ROM初始化文件是用来设置ROM中保存的程序的可执行代码的机器码。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-7-5 05:04 , Processed in 0.098533 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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