专栏中心

EEPW首页 > 专栏 > 写verilog程序时提高硬件意识

写verilog程序时提高硬件意识

发布人:0750long 时间:2010-03-12 来源:工程师 发布文章
写verilog程序时提高硬件意识

 

 

    写verilog程序时怎么提高硬件意识?是一个深奥的问题,但是如果你看了下面的程序、电路、仿真,明白什么样的程序生成什么样的电路,绝对能提高你的硬件意识,硬件意识是其中一方面,还要有系统意识。

D-type flip flop

reg q;

always @ (posedge clk)
  q <= d;




 
D type flip flop with asynchronous reset

reg q;

always @ (posedge clk or posedge reset)
  if (reset)
    q <= 1'b0;
  else
    q <= d;




 
 
D type flip flop with synchronous reset

reg q;

always @ (posedge clk)
  if (reset)
    q <= 1'b0;
  else
    q <= d;




 
 
D type flip flop with gated clock

reg q;
wire gtd_clk = enable && clk;

always @ (posedge gtd_clk)
  q <= d;




 
 
Data enbled D type flip flop

reg q;

always @ (posedge clk)
  if (enable)
    q <= d;




 
 
 
Negative edge triggered D type flip flop

reg q;

always @ (negedge clk)
  q <= d;


Latches
 

Latch

reg q;

always @ (q or enable)
   if (enable)
      q = d;



Multiplexers
 

Two input multiplexer (using if else)

reg y;

always @ (a or b or select)
   if (select)
      y = a;
   else
      y = b;



 
 
 
Two input multiplexer (using ternary operator ?:)

wire t = (select ? a : b);



 


 
 
Two input multiplexer (using case statement)

reg w;

// mux version 3
always @ (a or b or select)
   case (select)
      1'b1 : w = a;
      default : w = b;
   endcase




 
Two input multiplexer (using default assignment and if)

reg p;

// mux version 4
always @ (a or b or select)
   begin
   p = b;
   if (select)
      p = a;
   end




 
Three input priority encoded mux multiplexer (using if else)

reg q;

always @ (a or b or c or select2)
   if (select2 == 2'b00)
      q = a;
   else 
      if (select2 == 2'b01)
         q = b;
      else
         q = c;
 

 




 
Three input priority encoded mux multiplexer (using case)

reg r;

// Priority encoded mux, version 2
always @ (a or b or c or select2)
   begin
   r = c; 
   case (select2)
      2'b00: r = a;
      2'b01: r = b;
   endcase
   end
 

 




 
Three input multiplexer with no priority (using case)

reg s;

always @ (a or b or c or select2)
   begin
   case (select2) // synopsys parallel_case
      2'b00: s = a;
      2'b01: s = b;
      default: s = c; 
   endcase
   end

 



 

上面的这些资料无意识间在一个国外的网站看到,觉得非常有用,弄出来与大家分享,不过要注意一点,FPGA内部的D触发器,带有使能端enalbe,上面的有些电路可能和实际FPGA综合后的电路有所出入,但是我相信这绝对是一份好资料。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

中频宽带接收机AGC电路的研究

焕新启航·品质跃升 IICIE国际集成电路创新博览会,构建全球集成电路全产业链生态平台

2026-01-07

存储芯片概念大面积高开 美光科技涨超10%,再创历史新高

CES获奖:GoLe-Robotics高端住宅自动配送AI机器人AA-2

数字AGC及相关技术研究

Littelfuse推出适用于电动汽车电池、电机和安全系统的汽车级电流传感器

CES 2026:联发科博通领衔 面向AI应用的Wi-Fi 8时代开启

从沉浸式 XR 到先进机器人与可穿戴设备:Bosch Sensortec 推出 BMI5 运动传感器平台

新一代小米SU7预计4月份上市

马斯克杀疯了!xAI官宣200亿美元融资,这次真能“干翻”OpenAI?

振荡电路实用设计手册

西门子与英伟达达成合作,将共同开发工业AI系统

精准感知时刻在线:Bosch Sensortec 推出 BMI423 惯性测量单元

一种中频数字化接收机中的自动增益控制方案

一种数字中频接收机的设计与实现

5个新申请

Gao 2003-03-17
更多 培训课堂
更多 焦点
更多 视频

技术专区