原创 写verilog程序时提高硬件意识

2010-3-1 10:26 3175 9 12 分类: FPGA/CPLD

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



D-type flip flop

reg q;

always @ (posedge clk)
  q <= d;





dff.jpg
dff_wave.jpg

 
D type flip flop with asynchronous reset

reg q;

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





dff_reset.jpg
dff_reset_wave.jpg

 
 
D type flip flop with synchronous reset

reg q;

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





dff_sync_reset.jpg
dff_sync_reset_wave.jpg

 
 
D type flip flop with gated clock

reg q;
wire gtd_clk = enable && clk;

always @ (posedge gtd_clk)
  q <= d;





dff_clk_enable.jpg
dff_clk_enable_wave.jpg

 
 
Data enbled D type flip flop

reg q;

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





dff_data_enable.jpg
dff_data_enable_wave.jpg

 
 
 
Negative edge triggered D type flip flop

reg q;

always @ (negedge clk)
  q <= d;





dff_negedge.jpg

dff_negedge_wave.jpg

Latches
 

Latch

reg q;

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





latch.jpg
latch_wave.jpg

Multiplexers
 

Two input multiplexer (using if else)

reg y;

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





mux_y.jpg

mux_y_wave.jpg

 
 
 
Two input multiplexer (using ternary operator ?

wire t = (select ? a : b);





mux_t.jpg
 

mux_t_wave.jpg

 
 
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





mux_w.jpg
mux_w_wave.jpg

 
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





mux_p.jpg
mux_p_wave.jpg

 
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;
 





mux_q.jpg
mux_q_wave.jpg

 
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
 





mux_r.jpg
mux_r_wave.jpg

 
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





mux_s.jpg

 


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

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2014-10-20 20:23

看不到图啊

用户1669570 2013-10-15 10:14

小哥图看不到,能发邮箱吗,感激不尽,1124429395@qq.com

ash_riple_768180695 2010-3-1 09:16

确实如此,尽早建立这样的意识,就能少走不少弯路。
相关推荐阅读
用户244280 2011-04-09 02:19
有源晶振的EMC设计
    有源晶振的电路设计常见有两种:(1)、 (2)、原理图设计要点:(1)、晶振电源去耦非常重要,建议加磁珠,去耦电容选三个,容值递减。(2)、时钟输出管脚加匹配,具体匹配阻值,可根据测试结果而定...
用户244280 2011-04-05 12:46
三极管开关电路之一(基本电路)
       在板卡设计中,三极管开关电路用得非常多,然而却经常被人忽视。一位同事曾经对我说,都什么时代了,还用三极管。但是用得好的话,绝对事半功倍。        在最近的一次板卡上机调试中,由于板...
用户244280 2010-07-17 00:12
远征军魂
              今天重温了一下那段历史,一段被经历过的老年人时刻萦绕在脑海无法忘却,被浮躁的中年人忘却,被无知的青年一无所知的历史-----中国远征军。        看完凤凰大视野的那段...
用户244280 2010-06-22 22:13
毛主席词一首
     我很喜欢毛主席的一些诗词,经常去诵读,下面是毛主席的一首词,是红军长征过程中,攻占了娄山关后毛主席写的,词如下:  忆秦娥-娄山关    西风烈   长空雁叫霜晨月   霜晨月   马蹄声碎...
用户244280 2010-06-22 22:04
与君分享---我的一首词
南国冬暖阳花红枝未枯枝未枯好景处处无心留顾 十年漫漫寒窗苦满心抱负却无路却无路愁绪千千泪如雨注...
用户244280 2010-06-22 22:03
我的诗两首
     其一 孤坐仰苍穹星辰月当空又是中秋夜愁绪谁能懂          其二荔园初夏杨柳垂,晓风拂来破静水,怎奈此景无限悲,前途何方愁相随!...
EE直播间
更多
我要评论
3
9
关闭 站长推荐上一条 /3 下一条