VerilogHDL实例

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文档含有很多Verilog HDL例子://与门

module zxhand2(c,a,b);

input a,b;

output c;

assign c= a & b;

endmodule

//或门

module zxhor2(c,a,b);

input a,b;

output c;

assign c= a | b;

endmodule

//非门

module zxhnot2(c,b);

input b;

output c;

assign c=~ b;

endmodule

////异或门

module zxhxro2(c,a,b);

input b;

output c;

assign c=a ^ b;

endmodule

两选一电路

module data_scan(d0,d1,sel,q); output q;

input d0,d1,sel;

wire t1,t2,t3;

n1 zxhand2(t1,d0,sel);

n2 zxhnot2 (t4,sel);

n3 zxhand2(t2,d1,t4);

n4 zxhor2(t3,t1,t2);

assign q=t1;

endmodule

verilog HDL实例(一)

练习一.简单的组合逻辑设计

目的: 掌握基本组合逻辑电路的实现方法。

这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意

equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。

模块源代码:

//--------------- compare.v -----------------

module compare(equal,a,b);

input a,b;

output equal;

assign equal=(a==b)?1:0; //a等于b时,equal输出为1;a不等于b时,

//equal输出为0。

endmodule

测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。

测试模块源代码:

`timescale 1ns/1ns //定义时间单位。

module comparetest;

reg a,b;

wire equal;

initial //initial常用于仿真时信号的给出。

begin a=0;

b=0;

#100 a=0;

b=1;

#100 a=1;

b=1;

#100 a=1;

b=0;

#100 $stop; //系统任务,暂停仿真以便观察仿真波形。

end

compare compare1(.equal(equal),.a(a),.b(b)); //调用模块。

Endmodule

【例3.1】4 位全加器

module adder4(cout,sum,ina,inb,cin);

output[3:0] sum;

output cout;

input[3:0] ina,inb;

input cin;

assign {cout,sum}=ina+inb+cin;

endmodule

【例3.2】4 位计数器

module count4(out,reset,clk);

output[3:0] out;

input reset,clk;

reg[3:0] out;

always @(posedge clk)

begin

if (reset) out<=0; //同步复位

else out<=out+1; //计数

end

endmodule

09.04.07

【例5.11】模为60 的BCD 码加法计数器

module count60(qout,cout,data,load,cin,reset,clk); output[7:0] qout;

output cout;

input[7:0] data;

input load,cin,clk,reset;

reg[7:0] qout;

always @(posedge clk) //clk 上升沿时刻计数

begin

if (reset) qout<=0; //同步复位

else if(load) qout<=data; //同步置数

else if(cin)

begin

if(qout[3:0]==9) //低位是否为9,是则

begin

qout[3:0]<=0; //回0,并判断高位是否为5

if (qout[7:4]==5) qout[7:4]<=0;

else

qout[7:4]<=qout[7:4]+1; //高位不为5,则加1

end

else //低位不为9,则加1

相关文档
最新文档