可重用設計--使用符號常量和parameter
好的設計習慣會在hdl**中避免使用「魔鬼數字」,而是盡量採用符號常量。verilog hdl中,使用關鍵字localparam宣告符號常量
4位全加器的verilog hdl描述
module adder_carry_hard_lit
(input wire [3:0] a, b,
output wire [3:0] sum,
output wire cout //進製輸出
);// signal declaration
wire [4:0] sum_ext;
//body
assign sum_ext = + ;
assign sum = sum_ext[3:0];
assign cout= sum_ext[4];
endmodule
引數化的全加器描述
module adder_carry_local_par
(input wire [3:0] a, b,
output wire [3:0] sum,
output wire cout // carry-out
);// constant declaration
localparam n = 4, //定義匯流排位寬為n
n1 = n-1;
//內部訊號宣告
wire [n:0] sum_ext;
//程式主體
assign sum_ext = + ;
assign sum = sum_ext[n1:0];
assign cout= sum_ext[n];
endmodule
verilog hdl提供了一種叫做parameter的機制,可以在模組例項時傳遞資訊給模組。這種機制可以提高模組的通用性和可重用性。通過parameter模組內部引數值可以被修改,大大簡化設計過程。通過使用引數,設計者可以設計出通用性更高的模組,提高設計的可重用性。
verilog 2001,引數宣告語法如下
module module_name
#(parameter parameter_name1 = parameter_value1,//引數宣告使用關鍵字parameter,
… //多個引數宣告使用逗號(,)分隔
parameter_namen = parameter_valuen;)(
//埠宣告
);引數化的全加器電路
module adder_carry_para
#(parameter n=4)
(input wire [n-1:0] a, b,
output wire [n-1:0] sum,
output wire cout // carry-out
);// constant declaration
localparam n1 = n-1;
// signal declaration
wire [n:0] sum_ext;
//body
assign sum_ext = + ;
assign sum = sum_ext[n1:0];
assign cout= sum_ext[n];
endmodule
帶引數模組的例項
module adder_insta
(input wire [3:0] a4, b4,
output wire [3:0] sum4,
output wire c4,
input wire [7:0] a8, b8,
output wire [7:0] sum8,
output wire c8
);//例項乙個8位寬的加法器
adder_carry_para #(.n(8)) unit1
(.a(a8), .b(b8), .sum(sum8), .cout(c8));
//例項乙個4位寬的加法器
adder_carry_para unit2
(.a(a4), .b(b4), .sum(sum4), .cout(c4));
endmodule
Python GUI類設計 可重用時鐘
設計乙個gui類來顯示乙個時鐘,假設要在乙個畫布內顯示它而且能夠在其他程式中。需要定義乙個時鐘類來實現時鐘的重用。進一步說,為了在圖形上顯示這個時鐘,需要將它定義為乙個widget小構件。因此最好的選擇是定義時鐘類擴充套件canvas類,使時鐘物件能夠像canvas物件一樣使用。定義時鐘類still...
將menu設計為可重用的子系統
這篇部落格對應線上課程第七次實驗。網易雲課堂 實驗樓 庫 需要新增兩個函式menuconfig,executemenu用於新增命令和執行menu程式 另外需要handleargv處理命令字串集,再傳給執行命令的具體函式。編寫makefile可以實現自動化編譯,編寫完成後,使用make命令,gcc可以...
小心使用可修改的常量。
procedure tfdbform editform md.enabledatasetevent aenalbed boolean const cdetailbeforeeditevent tdatasetnotifyevent nil cdetailbeforedeleteevent tdata...