夏宇闻 发表于 2012-3-17 19:46:46

本帖最后由 夏宇闻 于 2012-3-17 20:05 编辑

回复夏宇闻
因为在我的整个设计中对时间要求是很高的,至少要再几十ns之内完成计算,而我所用到的时钟周 ...
玻色子 发表于 2012-3-17 11:14 http://www.fpgaw.com/images/common/back.gif
把一百个寄存器分十段每段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前仿真的结果

夏宇闻 发表于 2012-3-19 06:29:11

本帖最后由 夏宇闻 于 2012-3-19 06:39 编辑

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

cl ...
lanpad 发表于 2012-3-18 21:23 http://www.fpgaw.com/images/common/back.gif
触发器翻转需要有足够的建立时间和保持时间才能实现。您描述的情况必定出现问题,因为建立时间不可能得到满足,虽然保持时间可以满足要求。您必须认真读几遍我编写的书,深入理解阻塞赋值和非阻塞赋值的不同,才能理解这个现象。

yuexinwei 发表于 2012-3-20 11:06:26

夏老师您好:我想下面的这个程序中for循环语句执行的起止地方在哪??是只执行z=0;还是执行z=0;和z;还是执行第一个begin...and之间的所有代码???先在这谢谢老师了!!
module two_BCD(       //二进制码转BCD码
    input b,
    output reg p
    );
reg z;
integer i;
always@(*)
begin

for(i=0;i<=17;i=i+1)
                z=0;
        z=b;//将输入的值存到一个18位的变量中。
        repeat(5)
       begin
          if(z>4)
              z=z+3;//判断加3
        if(z>4)
              z=z+3;
                        z=z;
       end
       p=z;
end

endmodule

夏宇闻 发表于 2012-3-21 20:28:23

夏老师您好:我想下面的这个程序中for循环语句执行的起止地方在哪??是只执行z=0;还是执行z=0;和z;还 ...
yuexinwei 发表于 2012-3-20 11:06 http://www.fpgaw.com/images/common/back.gif
就这个程序而言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 http://www.fpgaw.com/images/common/back.gif
您的学习方法是对的。学习基本语法与动手编程、仿真、下载结合起来验证自己编写的代码。但有些与开发板配套的实验代码和教材存在不少问题,不介绍仿真的重要性,语法介绍和设计方法思路都存在一些问题,需要改进。您只要认真读您已经买的书,认真做每章后的思考题和练习,到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 http://www.fpgaw.com/images/common/back.gif
ROM中如果没有可执行的机器码它又有什么用呢?ROM初始化文件是用来设置ROM中保存的程序的可执行代码的机器码。

aikimi7 发表于 2012-3-26 16:41:49

夏老师,你好!
Verilog表示小数可采用数的定标来实现。我现在的问题是:
代码里我需要进行数的乘法和加法,所以我把原来8位的输入改为16位输入,即8位表示整数、8位表示小数,现在我想输入还是8位,能不能在代码里添加语句实现16位输入呢?
是不是先进行移位8位寄存器起来,这时的时钟和原来的一样吗?
页: 18 19 20 21 22 23 24 25 26 27 [28] 29 30 31 32 33 34 35 36 37
查看完整版本: 至芯科技【夏宇闻教授专栏】与你一起搞定FPGA设计!