Electronics 版 (精华区)

发信人: xiaozhang (校长), 信区: Electronics
标  题:  Verilog简明教程 3 (转载) 
发信站: 哈工大紫丁香 (Sun Jul  7 10:56:27 2002) , 转信


 
【 以下文字转载自 IM 讨论区 】 
【 原文由 papulum 所发表 】 
* 计数器的verilog描述如下: 
module count(in,set,cp,out) ;//此计数器,在cp的上升沿将输入赋给输出,在cp的上升 

沿使输出加一 
input [15:0] in; 
input set,cp; 
output [15:0] out; 
reg [15:0] out; 
always @ (posedge set) 
 #1 out = in; 
always @(posedge cp) 
 #1 out = out+1;  //verilog容许一个信号同时出现在等号两端,只要它是reg类型的 
endmodule 
* latch的描述如下: 
always @(clk or d) 
    if (clk) q = d; 
* 时序机的verilog描述如下: 
always @(posedge CLK)  //D是下一个状态,Q是当前状态,e1,e2是输入,a,b是输出 
 Q=D; 
always @(Q or othercase) begin //当Q变化或输入e1,e2变化时D要相应变化 
 D = Q; //note 1 
 a = 0; 
 b = 0; 
 ...... 
 case(Q) 
  q1:begin 
   q1 action; 
   if(e1)D=d1; 
   if(e2)D=d2; 
   else D=d3; 
   a = 1; //note 2 
   end 
  q2:begin 
   b = 1; 
   ...... 
   end 
  default:begin 
   a = 0; 
   b = 0; 
   ...... 
   end 
 end 
---annotations--- 
 note 1: 
  This is a custom expression,after reset,D should be equal to Q; 
 note 2: 
  In this state machine,a is only equal to 1 at state q1,in 
  other state,a is equal to 0; 
* RAM的verilog描述如下: 
module ram(din,ain,dout,aout,rd,wr);//这是一个双口RAM,分别有: 
     //输入端:输入地址 ain;输入数据 din;上升沿有效的写信号 wr; 
     //输出端:输出地址 aout;输出数据 dout;高电平有效的读信号 rd; 
  inout [7:0] din; 
  input [7:0] ain,aout; 
  input rd,wr; 
  output [7:0] dout; 
  reg [7:0] memory [0:255];   //请注意这是存储阵列的描述方法,描述了一个共有2 
56个字的存储阵列, 
      //每个字是8位 
  assign dout = rd ? memory[aout] : 8'bz; //"assign"关键字表示并行赋值语句的 
开始 
      //"?"运算符的作用和在C语言中一样 
      //"8'bz"是一个常量,表示一个字节的高阻态,其中 
      //8表示长度是8bit,"'"是固定分割符,"b"表示后面的数据是以比特形式给出的, 
 
      //"z"表示高阻; 
      //举例:4'ha表示长4bit的数"1010" 
      //类似的还可举出5'b10111,6'o33等等 
  always @(posedge wr) 
 memory[ain] = din; 
endmodule 
* 模块引用 
假设在前面(可以是别的模块)定义了module ram(din,ain,dout,aout,rd,wr),则引用此 
模块时只需写 
ram myram(din_in_map,ain_in_map,dout_in_map,aout_in_map,rd_in_map,wr_in_map) 

 //其中"ram"是所引用的module名,"myram"是你起的instance名, 
 //"din_in_map"等等是图中的节点名,和器件(module)中的"din..."进行"虚实结合"; 
* 预编译 
类似C语言,只需写 
`include "<pathname:filename>",反上撇号"`"是verilog的预编译符,类似C中的"#". 
 
-- 



--

※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 218.108.29.91]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.302毫秒