您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页Verilog

Verilog

来源:叨叨游戏网
Verilog数字系统设计

 专用硬线逻辑与微处理器的比较

微处理器:设计周期短,可以利用的资源多;但速度,能耗,体积等性能受该微处理器芯片和外围电路的;串口工作方式 专用硬线逻辑:由于FPGA是一种通用的器件,它的基本结构决定了只对某一种特殊的应用,其性能不如专用的ASIC电路;功能单一  名词缩写

SOC 片上系统 SOPC 片上可编程系统 UDP 用户定义源语元件(用真值表表达) ASIC 专用集成电路 HDL 硬件描述语言 EDA 电子设计自动化

PLD 可编程逻辑器件 {FPGA现场可编程逻辑门阵列

CPLD 复杂的可编程逻辑器件}

 Verilog HDL与VHDL的比较

Verilog HDL 拥有更广泛的设计群体,成熟的资源也远比VHDL丰富。且Verilog HDL 是一种非常容易掌握的硬件描述语言;而掌握VHDL设计技术比较困难。 Verilog的优越性使其成为IEEE标准,因而拥有更强的生命力。  IP核:是具有知识产权的

包括:软核:源代码,设计文件(Verilog HDL模型 固核:经过编译的(电路结构编码文件

硬核:于芯片结合的(电路结构版图掩膜  测试模块

module test(sout,sin,ena); output sout; input sin,ena;

mytri tri_int(.out(sout),.in(sin),.enable(ena)); endmodule

module mytri(out,in,enable); output out;//默认为wire类型 input in,enable;

assign out=enable?in:’bz;//‘bz高阻 endmodule

 Verilog 的基本设计单元式“模块”(block)

模块由两部分组成: 一部分描述接口; 另一部分描述逻辑功能。 Verilog程序包括4个部分:端口定义,I/O口说明,内部信号声明和功能定义 输入输出,方向,位宽,数据类型; 顺序块:顺序执行 parameter d=50; reg[7:0] r; begin

#d r=’h35;

#d ->end_ware;//表示触发事件end_ware使其翻转

end

并行块:同时执行 reg[7:0] r; fork

#50 r=’h35;

#150 ->end_ware;//表示触发事件end_ware使其翻转

join

module test; „„ always begin „„ end initial begin „„ end

endmodule

在这个module中always模块与initial模块同时执行  赋值

Input[width-1:0] r1; Parameter geshu=4; Input r2[geshu-1:0]; reg[width-1:0] r1; reg r2[geshu-1:0]; output[width-1:0] r3; wire[width-1:0] r3; assign r3=r1|r2;

reg 时序逻辑电路(赋值有先后区别的,always必须reg) wire组合逻辑电路(内部线连接,assign必须用wire) 其他时候要判断过的

Decode #(4,0) D1(A4,F16); 等同于:Decode D1(A4,F16);deparam D1.width=4

Decode模块名,D1自己调用时取的名字,width模块中的参数 阻塞式:

reg FF1,FF2,FF3;

always@(posedge Clock); begin Output=FF3;

FF3=FF2; FF2=FF1; FF1=Input;

End

非阻塞式:

reg FF1,FF2,FF3;

always@(posedge Clock); begin FF1《=Input;

FF2《=FF1; FF3《=FF2; Outpu《t=FF3;

end

连续赋值:

module mytri(out,in,enable); output out;//默认为wire类型 input in,enable;

assign out=enable?in:’bz;//‘bz高阻 endmodule

always@(al or d); begin

if(al) q=d;//有锁存器 end

always@(al or d); begin if(al) q=d; else q=0; //无锁存器 end

 initial 语句只执行一次。用于初始化

 always语句在仿真过程中时不断活动着的

 task定义任务。无返回值,能启动任务和函数,出入变量可有可无可多可少 task light

output color; input[31:0] tics;

begin repeat(tics) @(posedge clock);//等待tics个时钟的上升沿 Color=off; //关灯 end endtask

 function定义函数。有返回值,不能启动任务,至少一个输入变量 functiom<返回值的类型或范围>(函数名及返回值,例如getbyte); <端口定义>

<内部信号声明> begin „„

(getbyte=„„;) end

endfunction

 看书P117页

 从行为和功能表述一块电路模块 行为模块:系统级,算法级,RTL级 结构模块:门级,开关级

 看书P313实验代码的注释(表述代码功能,不是单纯读代码,而是要讲出实际意义)  10进制计数器 测试代码

module test(rest,clk,q);

reg rest;// cnt的输入 reg clk; // cnt的输入

wire q; //作为test_cnt10的输入,cnt的输出 always #50 clk=~clk; initial

begin

reset=0; clk=0;

#100 reset=1; #100 reset=0; #3000 reset=1; #100 reset=0; #10000 $stop; end

cnt10 test_cnt10(.rest(rest),.clk(clk),.q(q)); endmodule

十进制

Module cnt10(reset,clk,q); input reset,clk; output [3:0] q; reg [3:0] q;

always @ (posedge clk or posedge reset) begin if(reset) q=0; else if(q==9) q=0; else q=q+1; end

endmodule

 60进制计数器

module cnt60(reset,load,d,cin,clk,q,cout); input reset,load,cin,clk; input [6:0] d; output cout; output [6:0]q;

reg [6:0]q;

always @ (posedge clk or posedge reset) begin if(reset) q=0; else if(load) q=d; else if(cin) begin if(q==9) q=7'h10; else if(q==7'h19) q=7'h20; else if(q==7'h29) q=7'h30; else if(q==7'h39) q=7'h40; else if(q==7'h49) q=7'h50; else if(q==7'h59) q=0; else q=q+1; end end

assign cout=((q==7'h59)?1:0)&cin; endmodule

//always模块和assgin是并行处理的

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务