ljjshuishou2的个人空间 https://blog.eetop.cn/1237294 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

练习6 函数使用

已有 1282 次阅读| 2015-3-11 17:32 |个人分类:总结

Verilog 数字系统设计教程 第三部分 练习六

 

练习使用Altera公司的Quartus II9.0软件与Modelsim 6.5e联合仿真把实验过程及遇到的问题总结如下:在练习的过程中难免会出现这样的那样的问题,和平时在纸上写程序不同,这哪怕错一个字母都会出现好多错误,所以以后再练习过程中一定不能着急,发现错误慢慢排查,最终一定能熟练地掌握这门语言。因此把自己平时做的实验练习总结下来,在做的过程中那出现错误都记下来,方便日后查验。

1、打开quartus II,在菜单栏点击:<File>--><New Progect Wizard...>如下图所示:

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

2、出现:New Project Wizard:Introduction,单击<Next>,出现路径如图:

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

3、此时可直接点《Finish》

4、《File》--》《New》

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

选择《Verilog HDL File》--》《OK》,出现编辑框,输入如下文件:

module tryfunct(clk,n,result,reset);
 output[31:0] result;
 input[3:0]  n;
 input   clk,reset;
 
 reg[31:0]  result;
 
 always @(posedge clk)
  begin
   if(!reset)
    result <= 0;
   else
    begin
     result <= n*factorial(n)/(2*n+1);
    end
  end
 function[31:0] factorial;
  input[3:0] operand;
 
  integer   index;//原文中是用的"reg[3:0] index"但会编译错误出现:Error (10119):

                  //Verilog HDL Loop Statement error at tryfunct.v(23): loop with

                  //non-constant loop condition must terminate within 250 iterations

  begin
   factorial = operand?1'b1:1'b0;
   for(index = 4'd2;index <= operand; index = index + 4'd1)
    factorial = index * factorial;
  end
 endfunction
 
 
endmodule

5、选择《Processing》--》《Start》--》《Start Analysis&Synthesis》或点击如下按钮,完成综合。

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

6.《Processing》--》《Start》--》《Start Test Bench Template Writer》:

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

7、打开编译好的测试文件:《File》--》《Open》,一般在本文件夹的《simulation》-》《modelsim》中,把文件类型设置成《*.*》才能看到一个文件:《tryfunct.vt》,打开此文件。最好把里面的内容删除,重新编写如下程序:

 `timescale 1ns/100ps
 `define clk_cycle 50
module tryfuctTop
 reg[3:0] n,i;
 reg    reset,clk;
 wire[31:0] result;
 
 initial
  begin
   clk = 0;
   n = 0;
   reset = 1;
   #100 reset = 0;
   #100 reset = 1;
   for(i=4'b0;i<=15;i=i+1)
    begin
     #200 n = i;
    end
   #100 $stop;
  end
 
 always #`clk_cycle clk = ~clk;
 
 tryfunct m(.clk(clk),.n(n),.result(result),.reset(reset));
endmodule
这样编写完后可以用第五步的方法进行综合:《Processing》--》《Start》--》《Start Analysis&Synthesis》

7、接下来是联合Modelsim进行仿真了,如果是第一次使用需要进行一些设置:《Tools》--》《Options》--》《EDA Tools Options》的《Modelsim》中键入modelsim 6.5e的文件路径。如不会可以百度搜索详细内容。这里不再敖述。

8、点击《Assignments》--》《Settings》,展开《EDA Tools Setting》,在《Simulation》中输入《Tool name》-》《ModelSim》;《Fomate for output netlist》-》《Verilog HDL》;《Time scale》-》《1 ns》然后点击《Test Bench》--》《New》输入下图中的内容:从上至下依次为:测试文件名:《tryfunct》,测试文件模块名:《tryfunctTop》,引用的模块命名《m》,加入那个测试文件后《OK》《OK》《OK》
Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六
Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六
Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

然后《Tools》--》《Run EDA Simulation Tool》--》《EDA RTL Simulation》出现如下界面(展开work后):Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

不是预想的情况,没有把测试文件加载进来,可能是文件有错误,可以手工编译,点击modelsim中的《Compile》--》《Compile》找到《tryfunct.vt》进行编译《Compile》发现果真有错误,如下:

# ** Error: G:/verilog/tryfunct/simulation/modelsim/tryfunct.vt(4): near "reg": syntax error, unexpected "reg", expecting ';'双击,查找发现“module tryfunctTop”后没有分号,加上分号后再编译,通过,发现work中多了一个文件《tryfunctTop》双击后出现下图,右键单击如图所示:

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

后出现:Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六
而后单击:
Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

后发现不能停止,《Simulate》--》《Break》退出后分析测试文件发现

for(i=4'b0;i<=15;i=i+1)
    begin
     #200 n = i;
    end

这一段由于i为‘0000’-‘1111’最大为15,所以会一直执行,去掉等号,重新编译,仿真波形如图所示:

Verilog <wbr>数字系统设计教程 <wbr>第三部分 <wbr>练习六

到此完成实验。

总结:

    尽管有书作参考,但还是出现了这样那样的问题,经过自己一步步认真解决感觉有一点点的长进,但还是有几个问题没有弄清楚,比如说这个仿真只是综合后的仿真,但是如何进行时序的仿真并不知道如何进行设置。期待以后能够找到解答。




点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 238

    访问数
关闭

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

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 23:25 , Processed in 0.026526 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部