verilog 学习 夏宇闻 变量 运算符 简单语句 乘法器

Verilog学习:

1.P31 例3.1

仿真一直在报错:

未解决。

本例的意思是在Deccode模块已定义变量:Width=1,Polarity=1。在top模块引用时,通过  #(4,0),实例D1实际引用的是:Width=4,Polarity=0的Deccode模块;通过 #(5),实例D2实际引用的是:Width=5,Polarity=1的Deccode模块;

2.P31 例3.2

本例的意思是不仅有例3.1的方法改变常量的值,还可以利用dafparam命令。

3.变量:

wire

reg

memory:通过扩展reg型数据的地址范围来生成。

4.运算符

单目运算符:clock=~clock,单目取反运算符,带一个操作数

双目运算符:c=a|b,双位按位或运算符,可以带两个操作数

三目运算符:r=s?t:u,三目条件运算符,带三个操作数

整数除法运算时,结果要省略小数部分,只取整数部分;进行取模运算时,结果值的符号位采用模运算式的第一个操作数的符号位。

5.运算符

逻辑运算符:与&& 、或|| 、非!

关系运算符:>、 <、 <=、 >=

等式运算符:等于==、不等于!=、等于===、不等于!==

说明:==两个操作数必须完全一致,===两个操作数可以都是不定值或高阻态,输出为1,而==则会输出x。

移位运算符:<<n 左移n位,>>n右移n位。

位拼接运算符:{信号1的某几位,信号2的某几位,...信号n的某几位}

{a,b[3],c[2],w,1'b1,1'b0,...}

{4{w}}等价于{w,w,w,w}

{b,{3{a,b}}}等价于{b,a ,b,a,b,a,b}

缩减运算符:

运算优先级:

6.赋值语句和块语句

非阻塞赋值方式:b<=a;

阻塞赋值方式:b=a;

举例说明:

always@(posedge clk)

begin

b<=a;

c<=b;

end

赋值是在“always”块结束后执行的,c应该为原来的b值。

always@(posedge clk)

begin

b=a;

c=b;

end

时钟上升沿到来时,b取a的值,c取b的值(即马上等于a的值)。

7.块语句

 begin_end 顺序执行

fork_end 并行执行

8.条件语句if_else

条件语句必须在过程块中使用。所谓的过程块语句就是指由initial和always语句引导的执行语句的集合。

always @()

begin

if()  out1=int1;

else  out2=int2;

end

9.case语句

default    

10.repeat语句

设计一个乘法器,8位二进制的乘法器。

乘法器

module    mult_repeat(a,b,outcome);
 
 parameter size=8;
    input     [size:1]   a,b;
 
    output    [2*size:1] outcome;
    
    reg    [2*size:1]    temp_a,outcome;
    reg    [size:1]      temp_b;
 
always  @(a or b)
    begin
        outcome = 0;
        temp_a = a;
        temp_b = b;
        repeat  (size)             //repeat语句,size为循环次数
            begin
                if(temp_b[1])      //如果temp_b的最低位为1,就执行下面的加法
                    outcome = outcome + temp_a;
                temp_a = temp_a << 1;    //操作数a左移一位
                temp_b = temp_b >> 1;    //操作数b右移一位
            end
end
endmodule                

测试文件

`timescale 1ns / 1ps

module tb;

	// Inputs
	reg [8:1] a;
	reg [8:1] b;

	// Outputs
	wire [16:1] outcome;

	// Instantiate the Unit Under Test (UUT)
	mult_repeat uut (
		.a(a), 
		.b(b), 
		.outcome(outcome)
	);

	initial begin
		// Initialize Inputs
		a =8'b00000000;
		b =8'b00000000;

		// Wait 100 ns for global reset to finish
		#10;
        
		
		// Add stimulus here

     a =8'b00000011;
	  b =8'b00000011;

    
	end
      
endmodule

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值