METech 版 (精华区)
发信人: alphame (spring是春天), 信区: METech
标 题: Verilog简明教程 3 (转载)
发信站: 哈工大紫丁香 (2003年12月29日18:07:55 星期一), 站内信件
* 计数器的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中的"#".
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 218.104.33.3]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.517毫秒