Verilog編寫通用模組

2021-09-26 08:41:42 字數 3642 閱讀 2096

:移位暫存器, alu, 多路選擇器,二進位制乘法器,模n計數器,詹森計數器,引數化比較器,詹森解碼器

移位暫存器:

module unishiftregister(clk,reset,leftin,rightin,sel,loaddta,q);

parameter nbits = 4:

input clk,reset,leftin,rightin;

input [1:0] sel;

input [nbits-1:0] loaddta;

output [nbits-1:0] q;

reg [nbits-1:0] q;

always @(posedge clk)

if(reset==1)

q<=0;

else

case(sel)

2'b00: ;

2'b01:q<=;

2'b10:q<=;

2'b11:q<=loaddta;

endcase

endmodule

簡單alu(使用assign):

module arithlogicunit(a,b,opcode,dataz,compz);

parameter nbits = 2;

input [nbits-1:0] a,b;

input [1:0] opcode;

output [nbits-1:0] dataz;

output compz;

parameter and_op=0,nand_op=1,gt_op=2,xor_op=3;

assign dataz = (opcode == and_op)? a & b:

(opcode == nand_op)? ~(a&b):

(opcode == xor_op)? a`b:

'bx;

assign compz = (opcode == gt_op)? (a>b):'bx;

endmodule

多路選擇器(使用assign):

module muxtol(a,b,select,enable,q);

input a,b,select,enable;

output q;

assign q = (enable)?(select?a:b):'bz;

endmodule

二進位制乘法器::

(1)利用for迴圈

module mult_for(a,b,out);

parameter size=8;

input [size:1] a,b;

output [2*size:1] out;

reg [2*size:1] out;

always@(a or b)

begin

out=0;

for(i=1;i<=size;i=i+1)

if(b[i]==1)

out=out+(a<<(i-1));

end

endmodule

(2)利用repeat迴圈

module mult_repeat(a,b,out);

parameter size=8;

input [size:1] a,b;

output [2*size:1] out;

reg [2*size:1] out;

always@(a or b)

begin

out=0;

temp_a=a;

temp_b=b;

repeat(size)

begin

if(temp_b[1]==1)

out=out+temp_a;

temp_a=(a<<1);

temp_b=(b>>1);

endend

endmodule

模n計數器:

module counter_nbits_upton(clk,reset,q,qbar);

parameter nbits=2,upto=3;

input clk,reset;

output [nbits-1:0] q,qbar;

reg [nbits-1:0] counter

always @(posedge clk)

if(reset==1)

counter<=0;

else

counter<=(counter+1)%upto;

assign q=counter;

assign qbar=~counter;

endmodule

詹森計數器

module johnsoncounter(clk,reset,q);

parameter nbits = 3;

input clk,reset;

output [nbits-1:0] q;

reg [nbits-1] q;

always@(posedge clk)

begin

if(reset==1)

q<=0;

else if(q[nbits-1]==0)

q<=;

else

q<=;

endendmodule

引數化比較器:

module comparator(a,b,eq,gt,lt,ne,ge,le);

parameter nbits = 2;

input [nbits-1:0] a,b;

output eq,gt,lt,ne,ge,le;

reg [5:0] resultbus;

always @ (a or b)

if (a==b)

resultbus = 6'b100111;

else if(a>b)

resultbus = 6'b010110;

else

resultbus = 6'b001101;

assign =resultbus;

endmodule

詹森解碼器:

module johnsondecoder(s,en,y);

parameter n=3;

input [n-1:0] s;

input en;

output [2*n-1:0] y;

reg [2*n-1:0] y;

reg [2*n-1:0] addr;

integer i;

always @ (s or en)

if (en==1)

begin

addr=0;

for(i=0;iif(s[i])

addr=addr+1;

if(s[n-1])

addr=2*n-addr;

y='b0;

y[addr]='b1;

endelse

y='bx;

endmodule

python通用模組 python通用模組使用例子

usr bin python coding utf 8 author administrator import os import sys import shutil import struct python通用模組使用例子 result os.system pwd print type resul...

Verilog 模組和埠

模組定義以關鍵字module開始,模組名 埠列表 埠宣告和可選的引數宣告必須出現在其他部分的前面,endmodule語句必須為模組的最後一條語句。模組內部的5個組成部分是 變數宣告 資料流語句 低層模組例項 行為語句塊以及任何和函式。在模組的組成部分中,只有module 模組名 endmodule必...

Verilog 模組例化

模組的概念 模組 module 是verilog最基本的概念,是v設計中的基本單元,每個v設計的系統中都由若干module組成。2 模組的實際意義是代表硬體電路上的邏輯實體。3 每個模組都實現特定的功能。4 模組的描述方式有行為建模和結構建模之分。5 模組之間是並行執行的。6 模組是分層的,高層模組...