//⼀个实例************************
`timescale 1ns / 1ps //定义时钟刻度
module Transceiver (clk,rst_n, Data_in,Data_out); //模块名称
input clk; // ⼀个⼀位的输⼊参数,时钟:
input rst_n; // ⼀个⼀位的输⼊参数,复位:
input [3:0] Data_in; // ⼀个4位输⼊,reg为信号类型,
output [6:0] Data_out; // ⼀个7位输出
wire [6:0] Data_out;
HammingEncode HammingEncode_ins( //实例化⼀个名为HummingEncode的模块,并取名为HummingEncode_ins
.clk(clk), // 实例化的输⼊⼊⼝,将括号⾥clk这个参数,输⼊到这个模块的clk接⼝
.Data_in(Data_in), // ⼀个4位输⼊,reg为信号类型,
.Data_out(Data_out) //实例化的输出出⼝,将这个模块的Data_in参数,输⼊到外部名为Data_in变量,括号⾥
);
endmodule //结束模块
//**********************************************************************************
reg wire integer paramenter
8’b0000_0000; // " ’ “前的"8” 表⽰给后⾯的数分配⼏个⽐特的储存空间,或者⼏条⼆进制流,即数的位宽
//“b”表⽰后⾯的数是⼆进制计数法,相应还有“d”,“h”等
// 0000_0000就是数,"_“表⽰分隔符,⽆意义,主要便于观察数有多少位,另外"z”,"?"表⽰⾼阻,"x"表⽰不确定
-8’d5 //负号只能放在最前
paramenter定义常量 ;
但在实例化模块时可以修改,⽐如
module Decode(x,x);
paramenter x1=1,x2=1;
Endmodule
则实例化时使⽤#()可以修改常量:
Decode #(2,2) d1(x,x) ;
则d1中Paramenter x1=2,x2=2;
defparam A.B.C=2; //则可以将实例A下的实例B中的C常量修改为2
wire单驱动或连续 tri 多驱动 未定义逻辑强度->多驱动时冲突->不确定值
assign 连续赋值 这个必须是wire型
wire[7:0] x1;
reg 寄存器储存单元 always中必全为reg
负reg在操作中为正reg :4位 -1 -> +15
memory型 :储存器或数组
reg[7,0] memo[255,0];
位运算 : ^反 &与 |或 ^异或 ^~同或
逻辑运算 :&& || !
关系运算: > < >= <=
等式运算 :== != 存在x 或z ,结果为x ; === !== x或z也必须相同否则为0
移位运算:>> << a>>n; //a右移n位
位拼接:{ , , }
缩减运算 : C=&B; //则C为B[0]与到最后⼀位的值,同理 |