verilog语法练习

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

1,八位数据通路控制器

`define ON 1‟b1

`define OFF 1‟b0

wire controlswitch;

wire [7:0] in out;

assign out = (controlswitch == `ON) ? in : 8‟h00;

2,数据在寄存器中的暂时保存

module reg8(en ,clk, data,rst,out);

input en,clk,rst;

input [7:0] data;

output [7:0] out;

reg [7:0] out;

always @ (posedge clk)

begin

if(!rst)

out <= 0

else if (en)

out <= data;

else

out <= 8‟h00;

end

endmodule

3,状态机

module fsm(clk,rst,a,k1,k2);

input clk,rst,a;

output k1,k2;

reg k1,k2;

reg state;

parameteter Idle = 2‟b00, Start = 2‟b01, Stop = 2‟b10, Clear = 2‟b11; always @ (posedge clk)

begin

if (!rst)

begin

state <= Idle;

k2 <= 0;

k1 <= 0;

end

else

case (state)

Idle: begin

If(a) begin

state <= Start;

k1 <= 0;

end

else

state <= Idle;

end

Start : begin

If(!a)

state <= Stop;

else

state <= Start;

end

Stop :begin

If (a)

Begin

state <= Clear;

k2 <= 1;

end

else state <= Stop;

end

Clear : begin

If (!a)

begin

state <= Idle;

k2 <= 0;

k1 <= 1;

end

else

state <= Clear;

end

endcase

endmodule

4,组合逻辑电路设计实例

8位带进位端的加法器的设计实例module adder_8 (cout, sum, a,b,cin); output [7:0] sum;

output cout;

input [7:0] a;

input cin;

assign {cout,sum} = a+b+cin;

endmodule

5,指令译码电路的设计实现(利用电平敏感的always快来设计组合逻辑)。

//操做码的宏定义

`define plus 3‟d0

`define minus 3‟d1

`define band 3‟d2

`define bor 3‟d3

`define unegate 3‟d4

module alu (out, opcode,a,b);

output [7:0] out;

input [2:0] opcode;

input [7:0] a,b;

reg [7:0] out;

always @ (opcode or a or b)

begin

case(opcode)

//算术运算

`plus : out = a+b;

`minus : out = a-b;

//位运算

`band : out =a&b;

`bor :out =a|b;

//单目运算

`unegate out=~a;

default: out= 8‟hx;

endcase

end

endmodule

6,利用task和电平敏感的always块设计比较后重组信号的组合逻辑

module sort4(ra,rb,rc,rd,a,b,c,d);

parameter t = 3;

output [t:0] ra,rb,rc,rd;

input [t:0] a,b,c,d;

reg [t:0] ra,rb,rc,rd;

always @ (a or b or c or d)

//用电平敏感的always块描述组合逻辑

begin

reg [t:0] va,vb,vc,vd;

{va,vb,vc,cd}={a,b,c,d};

sort2(va,vc);

sort2(va,vb);

sort2(vc,vd);

sort2(vb,vc);

{ra,rb,rc.rd}={va,vb,vc,vd};

end

task sort2;.

inout [t:0] x,y;

reg [t:0] temp;

if (x>y)

begin

tmp = x;

x = y;

y = tmp;

end

endtask

endmodule

7,比较器的设计实例(利用赋值语句设计组合逻辑电路)

module compare (equal,a,b);

output equal;

input a,b;

assign equal = (a==b)?1:0;

endmodule

8,3-8译码器设计实例(利用赋值语句设计组合逻辑)

module decoder(out,in);

output [7:0] out;

input [2:0] in;

assign out = 1‟b1<

/*把最低位的1左移in(根据从in端口输入的值)位,并赋予out*/ endmodule

9,8-3编码器的设计实例

module encoder1(none_on,out,in);

output none_on;

output [2:0] out;

input [7:0] in;

reg [2:0] out;

reg none_on;

always @ (in)

begin :

local integer i;

out = 0;

none_on = 1;

/* returns the value of the highest bit number turned on*/

for (i= 0; i<8; i=i+1)

相关文档
最新文档