Vector0 向量賦值。 module top_module ( input wire [2:0] vec, output wire [2:0] outv, output wire o2, output wire o1, output wire o0 ); // Module body start ...
Vector0
向量賦值。
module top_module ( input wire [2:0] vec, output wire [2:0] outv, output wire o2, output wire o1, output wire o0 ); // Module body starts after module declaration assign outv = vec; assign o2 = vec[2]; assign o1 = vec[1]; assign o0 = vec[0]; endmodule
Vector1
註意使用未聲明的介面會隱式地生成一個1bit的wire變數,加一個`default_nettype none可以不隱式聲明,從而找到一些隱藏的bug。
`default_nettype none // Disable implicit nets. Reduces some types of bugs. module top_module( input wire [15:0] in, output wire [7:0] out_hi, output wire [7:0] out_lo ); assign out_hi=in[15:8]; assign out_lo=in[7:0]; endmodule
Vector2
大端和小端的轉換。
module top_module( input [31:0] in, output [31:0] out );// assign out ={in[7:0],in[15:8],in[23:16],in[31:24]}; endmodule
Vectorgates
按位或,邏輯或。
module top_module( input [2:0] a, input [2:0] b, output [2:0] out_or_bitwise, output out_or_logical, output [5:0] out_not ); assign out_or_bitwise = a | b; assign out_or_logical = a || b; assign out_not = {~b,~a}; endmodule
Gates4
按位計算。
module top_module( input [3:0] in, output out_and, output out_or, output out_xor ); assign out_and = ∈ assign out_or = |in; assign out_xor = ^in; endmodule
Vector3
拼接運算符。
module top_module ( input [4:0] a, b, c, d, e, f, output [7:0] w, x, y, z );// assign { w,x,y,z } = {a,b,c,d,e,f,2'b11}; endmodule
Vectorr
將輸入反轉。註意assign out[7:0] = in[0:7];是錯的,因為verilog不允許in[0:7]這樣的寫法
module top_module( input [7:0] in, output [7:0] out ); assign out={in[0],in[1],in[2],in[3],in[4],in[5],in[6],in[7]}; endmodule
Vector4
註意賦值的時候外面也要加{},如{24{in[7]}}不能寫成24{in[7]}。
module top_module ( input [7:0] in, output [31:0] out );// assign out = { {24{in[7]}} , in }; endmodule
Vector5
這題稍微有點意思,通過複製運算符可以將五個信號的全部按位同或計算出來。
module top_module ( input a, b, c, d, e, output [24:0] out );// // The output is XNOR of two vectors created by // concatenating and replicating the five inputs. assign out = ~{ {5{a}},{5{b}},{5{c}},{5{d}},{5{e}} } ^ { 5{a,b,c,d,e}}; endmodule
今天的題整體也比較簡單,不過網站上有一些知識點也是很有用的。