verilog完整程序结构的基本构成有哪些?

verilog完整程序结构的基本构成有哪些?,第1张

verilog一个完整的程序包括如下

1.module名定义

2.输入/出信号名,方向和位宽

3.模块逻辑定义和实现

4.endmodule

module traffic(clk,urgency,east_west,south_north,led)

input clk

input urgency

output [7:0]east_west,south_north

output [5:0]led

reg [7:0]east_west,south_north

reg [5:0]led

initial begin

east_west<=8'b0

south_north<=8'b0

led<=6'b100001end

always @(posedge clk)

begin if(urgency==1) led<=6'b100100

else if(east_west==8'b0 &&south_north==8'b0) begin

east_west<=8'b00101101

south_north<=8'b00101000

led<=6'b100001end

else if(east_west==8'b00000110 &&south_north==8'b1) begin

east_west<=8'b00000101

south_north<=8'b00000101

led<=6'b100010end

else if(east_west==8'b1 &&south_north==8'b1 &&led[5]==1'b1) begin

east_west<=8'b00101000

south_north<=8'b00101101

led<=6'b001100end

else if(east_west==8'b1 &&south_north==8'b00000110) begin

east_west<=8'b00000101

south_north<=8'b00000101

led<=6'b010100end

else if(east_west==8'b1 &&south_north==8'b1 &&led[2]==1'b1) begin

east_west<=8'b00101101

south_north<=8'b00101000

led<=6'b100001end

else if(east_west[3:0]==4'b0000) begin

east_west<=east_west-8'b111

south_north<=south_north-1'b1end

else if(south_north[3:0]==4'b0000) begin

east_west<=east_west-1'b1

south_north<=south_north-8'b111end

else begin

east_west<=east_west-1'b1

south_north<=south_north-1'b1

end

end

endmodule

上面是我前一段时间写的交通灯控制器设计代码,相应的英文字母对应相应的信号

1.module 结构

module    程序名称(

input   x,y;#输入信号

output  .....#输出信号

);#末尾加分号

程序正文

endmodule #程序结尾,无符号

2.数据类型:

reg:寄存器类型,数据存储单元,默认初始值为X。只能在always和intial语句中被赋值

例:reg[31:0]  x#32位寄存信号  reg y#一位寄存信号

wire:线网类型,不能存储数值,模块的输入输出默认为wire型,初始值为Z,值由它的驱动决定。在assign中赋值。

例:wire key

tri:多驱动器驱动的网络型数据。

memory:存储器,通过扩展reg的地址范围构成。

例:reg[3:0]  memo[255:0]  256个地址的4为寄存器

paramter:常量。

例:paramter one =2'd00

3.常用运算符

~:按位取反   ~1111=0000

!:逻辑取反

&  :按位与

&&:逻辑与

|   :按位或

|   :逻辑或

^  :异或

^~ :   同或

=:赋值 *** 作

<=:无阻塞赋值

==:等于

===:相同

!=:不等于

!==:不相同

<<:左移

>>:右移

{ , , ,  }:拼接符号

{{}}:复制

**:次幂

?:  :条件错做符 

+:加

-:减

*:乘

/:除

%:取模。模运算中,取第一个数的符号。

4.关键字

module :模块

input:输入信号

output:输出信号

inout:双向端口

begin:起始

end:结束

edge:边沿

posedge:上升沿

negedge:下降沿

case   endcase:case语句

if:判断

esle:

for:

endmodule:模块结束


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7958508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存