在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4243|回复: 8

[求助] 初学者请教一下

[复制链接]
发表于 2012-6-20 10:14:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x

你好,   

我是verilog的初学者,看过几本verilog的书籍,对里面简单的例子已经非常熟悉。由于一直对arm比较感兴趣,前几天在论坛看到这本书,非常喜欢,就买了一本,可是学习起来后发现理论知识和实践还相差甚远。

在uart的例子中,每句话、每个always块是什么意思肯定是明白的。但对于时序很吃力的可以看个大概,且各个always快相互影响、相互制约有点看不太明白。如果自己动手写肯定还差很多。我想后面arm的源码肯定是看不明白了。

想跟您请教一下,对于我现在这种学习水平,怎样才能提高verilog水平,需要从哪开始着手进行练习。

谢谢~

发表于 2012-6-20 10:36:50 | 显示全部楼层
Hi, 你好。
Verilog RTL的规则很简单,一般来说就如同书中所说的三种形式:assign语句,always逻辑赋值语句和always时序赋值语句。后面我们要做的是采用这三种形式来达到某种目的。

你先确认你理解这三种赋值语句的意义。每个语句会得到一个啥样的输出结果,这个必须清楚。一般来说,always时序赋值语句的给值,在下一个时钟沿后生效。其他两个赋值语句会立即生效,这个搞清楚了,后面的任务就是利用这种规则达到自己的目的。

你现在还没有习惯采用这三种赋值语句达到自己的目的,因此也就不理解别人为什么要这么做,来达成某个目的。你可以先仿真琢磨琢磨,也可以仿真一些简单的RTL任务来理解这三种语句搭配的效果。

先给你出个题目吧:



  1. module test (
  2.                       clk,
  3.                       rst,
  4.                       a,

  5.                       x
  6.                     );

  7. endmodule


复制代码
其中a只有在出现连续四个高电平的情况下,x输出一个周期的高电平。你先写写看,看看自己如何运用规则来完成自己的目的。
发表于 2012-6-20 10:44:28 | 显示全部楼层
Verilog RTL的规则简单,我们只需掌握这个规则,照章行事,一点点的熟练起来,即可写出漂亮的RTL出来。当然,可能刚开始错漏百出,不过没关系,重要的开始,慢慢的积累经验,积累对RTL的掌控力,那么写出处理器内核也只不过是手熟而已。
 楼主| 发表于 2012-6-20 12:40:55 | 显示全部楼层
回复 3# free-arm


    非常感谢您的答复,对于您跟才给出的小test,我写了一下,望批评指正。





  1. `timescale 1ns/10ps
  2. module test(clk,rst_n,a,x);
  3.   input        clk;
  4.   input        rst_n;
  5.   input        a;
  6.   output       x;
  7.   reg  [2:0]   cnt;
  8.   always@(posedge clk or negedge rst_n)begin
  9.     if(~rst_n)
  10.       cnt <= #1 3'b0;
  11.     else if(a)
  12.       cnt <= #1 cnt + 1;
  13.     else if(cnt==3'd5)
  14.       cnt <= #1 3'b0;
  15.     else
  16.       cnt <= #1 3'b0;
  17.   end
  18.   assign x = (cnt==3'd5)? 1 : 0;
  19. endmodule      



复制代码







  1. `timescale 1ns/10ps
  2. module tb_test();
  3.   reg   clk=0;
  4.   reg   rst_n=0;
  5.   reg   a=0;
  6.   
  7.   wire  x;
  8.   always  clk = #10 ~clk;
  9.   initial #50 rst_n=1;
  10.   initial begin
  11.     #75   a=1;
  12.     #100  a=0;
  13.     #50   a=1;
  14.     #30   a=0;
  15.     #100 $finish;
  16.   end
  17.   
  18.   test U1(.clk(clk),
  19.           .rst_n(rst_n),
  20.           .a(a),
  21.           .x(x)
  22.   );
  23.   initial begin
  24.     $fsdbDumpfile("dump.fsdb");
  25.     $fsdbDumpvars();
  26.   end
  27. endmodule  



复制代码


QQ截图20120620123526.jpg
发表于 2012-6-20 13:46:44 | 显示全部楼层
回复 4# 岁月永恒


    非常不错,就是这么个意思。在这里,你的设计中检验5个时钟沿。

  建议你购置一块FPGA开发板,慢慢的从点亮LED灯开始,到不断使用各种IP来完善设计。你有了开发板,你就有责任来独立做一些事情,那么这种责任会让你成长。

  不过不建议你放弃,很多事情都是勉为其难才成功的。不是很多事情都是恰到好处,难做的事情克服一下,就是另外一番洞天了。
 楼主| 发表于 2012-6-20 14:13:45 | 显示全部楼层
回复 5# free-arm


    嗯,好的,谢谢您~
发表于 2012-6-21 15:32:43 | 显示全部楼层
感谢free-arm,给初学者指出一条道路;
发表于 2012-6-21 17:31:34 | 显示全部楼层
回复 7# jm2000


不敢当。Verilog RTL是如此简单而高效的编程方式,希望更多人爱上它,并作出成绩来。
发表于 2019-7-19 01:59:54 | 显示全部楼层
Tank you
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-3-29 19:58 , Processed in 0.041759 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表