verilog week1

    科技2025-12-17  13

    verilog


    1.verilog实现补码运算

    1.1 补码转换规则

    为了方便计算,计算机中所有的数的形式都是以补码的形式存储。

    补码的转换规则如下:

    1.(正数)补码=(正数)本身

    2.(负数)补码=(负数非符号位)取反加一 如果我们设置数字为无符号数,那么其遵循转换规则1即可 如果我们设置数字为有符号数,那么其正数遵循转换规则1,负数遵守规则2。

    1.2 补码运算规则

    在计算机中补码运算规则如下: 正数+正数=>(正数)补码+(正数)补码=(正数)补码 负数+负数=>(负数)补码+(负数)补码=>(负数)补码 正数+负数=>(正数)补码+(负数)补码=>(负数)补码 or(正数)补码

    1.3 代码及运算结果

    在verilog中一个简单的补码运算如下:

    `timescale 1ns / 1ps module operation(); reg[7:0] a0,b0,a1,b1; reg[7:0] result; initial begin //以有符号数来表示 assign a0=8'b10000111;//-7 assign a1=8'b00000111;//7 assign b0=8'b00000101;//5 assign b1=8'b10000101;//-5 result=~a0[6:0]+8'b1+b0;//-7+5 $display("%b",result); result=(~a0[6:0]+8'b1)+(~b1[6:0]+8'b1);//-7-5 $display("%b",result); end reg[8:0] result1; initial begin assign a0=8'b01011101;//93 assign a1=8'b01101011;//107 assign b0=8'b11011101;//-93 assign b1=8'b11101011;//-107 result1=a0+a1;//93+107 $display("%b",result1); result1=(~b0[6:0]+8'b1)+(~b1[6:0]+8'b1);//-93-107 $display("%b",result1); end endmodule

    运行结果如下:

    2.verilog实现输出Hello 学号

    简单的实现如下:

    `timescale 1ns / 1ps module hello(); initial begin $display("hello 20188852"); $finish; end endmodule

    运行结果如下:

    3.修改代码

    `timescale 1ns/100ps //代码直接复制过去改 module helloworld( input wire[3:0] a, input wire[6:0] b, output reg result ); reg clk; assign a = 4'b0001; assign b = 7'b0000001; initial begin if(a == b) result <= 0; clk <= 0; $display("Hello,Initial"); end always #50 clk = ~clk; always @(posedge clk) begin $display("Hello posedge clk!"); end always @(clk) begin $display("Hello clk"); end always @ (result == 1) #150 $display("Hello result"); endmodule

    运行结果如下(输出四种结果):

    4.verilog实现冒泡排序

    4.1冒泡排序

    冒泡排序在c中的实现

    4.2代码和结果

    `timescale 1ns / 1ps module tb_test(); reg[3:0]data[11:0],temp;//声明一个存储数据的二维空间为12*4位,一个中间存储空间temp integer i,j; initial begin //阻塞赋值7,9,6,4,8,1,10,2,11,0,5,3 data[0]=7; data[1]=9; data[2]=6; data[3]=4; data[4]=8; data[5]=1; data[6]=10; data[7]=2; data[8]=11; data[9]=0; data[10]=5; data[11]=3; for(i=0; i<11; i=i+1) begin for(j=0; j<11-i; j=j+1) begin if(data[j]>data[j+1]) begin temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; end end end for(i=0; i<11; i=i+1) begin $display("%d",data[i]); end end endmodule

    结果如下: 参考文献如下: Veriog中的四种结构(initial,always,task,function) verilog常用系统函数以及例子 ps: 关闭仿真在vivado的控制台中输入close_sim

    Processed: 0.017, SQL: 9