Verilog程序代码集

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

1.全加器

Sum=A⊕B⊕Cin

Count=AB+Cin(A+B)

①数据流

module adder(a,b,Cin,Sum,Count); input [2:0]a,b;

input Cin;

output [2:0] Sum;

output Count;

assign {Count,Sum}=a+b+Cin; endmodule

②行为描述always语句

module adder(a,b,c,Cin,Sum,Count); input [4:0] a,b;

input Cin;

output reg [4:0] Sum;

output reg Count;

reg T1,T2,T3;

always@(a or b or Cin)

begin

Sum=a^b^Cin;

T1=A&B;

T2=Cin&A;

T3=Cin&B;

Count=T1|T2|T3;

end

endmodule

③结构体

module adder (a,b,Cin,Sum,Count);input a,b,Cin;

output Sum,Count;

Xor a1(s1,a1,b);

Xor a2(Sum,s1,Cin);

and a3(T1,a,b);

or a4(T2,a,b);

and a5(T3,Cin,T2);

or a6(Count,T1,T3);

Endmodule

2.数值比较器

①判断两值是否相等

module compare(a,b,equal);

input [7:0] a,b;

output equal;

assign equal=(a==b)?|0; ②谁大谁输出

module compare(a,b,out);

input [7:0] a,b;

output reg[7:0] out;

always@(a or b)

begin

if (a>b) out<=a;

else if (a==b) out<=a;

else out<=b;

end

endmodule

③输出参数

module compare(a.b.xgy,xsy,xey);

input [7:0] x,y;

output reg xgy,xsy,xey;

always@(x or y)

begin

if (x==y) xey=1;

else xey=0;

if (x>y) begin xgy=1;xsy=0;end

else if (x

endmodule

3.编码器(4-2 8-3 16-4编码)

①case语句8-3编码(优先)

module code (in ,out);

input [7:0] in;

output reg [2:0] out;

always@(in)

case x(in)

begin f=1;8‟b1xxxxxxx:out=3‟b111;end begin f=1;8‟b01xxxxxx:out=3‟b110;end begin f=1;8‟b001xxxxx:out=3‟b101;end begin f=1;8‟b0001xxxx:out=3‟b100;end begin f=1;8‟b00001xxx:out=3‟b011;end begin f=1;8‟b000001xx:out=3‟b010;end begin f=1;8‟b0000001x:out=3‟b001;end begin f=1;8‟b00000001:out=3‟b000;end default:begin f=0:out=3‟b000;end endcase

endmodule

②if-else语句(4-2优先编码)

module code(in,out);

input[3:0] in;

output reg [1:0] out;

always@(in)

if (in[3]==1):begin f=1;out=2‟b11;end else if (in[2]==1):begin f=1;out=2‟b10;end else if (in[1]==1):begin f=1;out=2‟b01;end else if (in[0]==1):begin f=1;out=2‟b00;end else begin f=0;out=2‟b00;end endmodule

4.多路选择器

①行为描述(4选1)

module choice(A,B,C,D,ncs addr out);

input [7:0]A,B,C,D;

input ncs;

input [1:0] addr ;

output reg[7:0] out;

always@(A or B or C or D or ncs or addr) begin

if (!ncs)

case(addr)

2‟b00:out=A;

2‟b01:out=B;

2‟b10:out=C;

2‟b11:out=D;

endcase

else out=0;

end

endmodule

5.设计一个4位双向移位寄存器。module shift(sout,out,clk,in,sin,d,load); input clk,sin,d,load;input[3:0]in;

output sout;output[3:0]out;

reg[3:0]out;

always @(posedge clk)

if(load) out<=in;

else

if(d==0)

begin

out<=out>>1;out[3]<=sin;sout<=out[0];end else

begin

out<=out<<1;out[0]<=sin;sout<=out[3];end 6.11111010000序列检测器module shift(q,s,d,clk);

output[11:0] q;

output s;

input d;

input clk;

reg[11:0] q;

reg s;

always @(posedge clk)

begin

q<=q<<1;q[0]<=d;

end

always @(posedge clk )

if(q==12'b 11111010000)

s<=1;

else

s<=0;

Endmodule

7.计数器

①计数分频器

8分频占空比1:1

module div(clk8,clk,rst);

input clk,rst;

output reg clk8;

reg [2:0] count;

always@(posedge clk)

begin

if (rst) begin

clk8<=0;count<=0;end else begin

if (count==7) count<=0;

else count<=count+1;

if (count<=3) clk_8<=0;

else clk_8<=1;

end

end

endmodule

相关文档
最新文档