Verilog的数据流建模和行为级建模

Verilog包括四种抽象层次:

  • 行为级或算法级:从算法角度进行设计,不关心具体的硬件实现和细节。
  • 数据流级:描述数据如何在各个寄存器之间流动,如何处理这些数据。这是verilog支持的最高抽象层次。
  • 门级:描述逻辑门及其连接关系。
  • 开关级(晶体管级):描述晶体管及其连接关系。这是verilog支持的最低抽象层次。

我们常说的寄存器传输级(RTL,Register Transfer Level)一般是指行为级和数据流级建模。但我一直以来不太能区分开行为级和数据流级。最近重新看夏宇闻老师翻译的《Verilog HDL数字设计与综合》,发现了比较好的例子。

以四选一多路选择器为例,s0s1是选择信号,i0i1i2i3是输入的数据,out为输出。数据流建模可以写为:

module muux4_to_1(
  	input i0,
  	input i1,
  	input i2,
  	input i3,
  	input s0,
  	input s1,
  
  	output out
);
  
  assign out = (~s1&~s0&i0)|
               (~s1& s0&i1)|
               ( s1&~s0&i2)|
               ( s1& s0&i3);
  
  // 或者如下这样写
  // assign out = s1? (s0? i3 : i2) : (s0? i1 : i0); 
endmodule

行为级建模如下:

module muux4_to_1(
  	input i0,
  	input i1,
  	input i2,
  	input i3,
  	input s0,
  	input s1,
  
  	output reg out
);
  
    always@(s1 or s2 or i0 or i2 or i3) begin
      case({s1,s0})
      	  2'b00: out = i0;
          2'b01: out = i1;
          2'b10: out = i2;
          2'b11: out = i3;
          default: out = 1'bx;
      endcase
    end
endmodule

可以简单总结出,数据流建模要清晰地写出数据之间的表达式关系,而行为级建模更像是C语言的思维,根据输入数据直接给出输出数据。

全部评论

相关推荐

学java时间比较短不到三个月,基本的技术栈都过了一遍就是都不太深,有个小项目。是继续找实习还是沉淀准备秋招呢?找实习的话会花很多时间在八股,放弃的话又怕秋招简历太难看。有无大佬支招
今天java了吗:1.一定要找实习,实习不一定要去,但是找实习过程中的面试经验和心态经验才是最重要的 2.八股本来就是大头,甚至比项目重要 3.这个时间段也是面试比较多的阶段,可以抓住机会锻炼。面试才会发现自己的不足,感觉自己会了和能给面试官娓娓道来是两码事
点赞 评论 收藏
分享
运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务