(开始前先叠个甲,本人是c++信息学竞赛生,对于电路这一块只能是略有涉猎,部分资料参考了百科,我尽我所能地去解释了,欢迎大佬来指正错误)

前两行include的意思是导入库文件,代码的库文件用了模拟电路和常用物理常数的库文件
module类似于一个函数,triode是函数名,代表了三极管,函数有三个值(p,g,k),p,g,k对应了阳极,栅极,阴级(图中也有对应)
最后一行代码endmodule意思是这一串定义结束(triode的定义看后面)
(图片传不上去了,只能用文字了)
include "disciplines.vams"
include "constants.vams"
module triode (P, g, k);
electrical p, g, k;
parameter real mu = 100;
parameter real kg1 = 1060;
parameter real kp = 600;
parameter real kvb = 300;
parameter real ex = 1.5;
real vpk, vgk, E1, ipk;
analog begin
vpk=V(p,k);
vgk=V(g,k);
E1 = vpk / kp In(1 + exp(kp (1/mu + vgk / sqrt(kvb + vpk*vpk))));
if (E1>0) begin
ipk = (pow(E1, ex) / kg1) * 2;
end else
beginipk = 0;
end
I(p,k)<+ ipk;
end
endmodule
这一块代码前两行导入库文件与前文作用相似,不再赘述
第三行这里定义了上一串代码的函数triode(p,g,k)
第四行到最后一行是函数的内容,第四行electrical p,g,k是定义了电学类型的节点,相等于可以记录电压和电流,第五到九行是定义了不同类似于c++变量的东西,其中
mu代表放大系数,影响栅极U对阳极I的控制能力。
kg1是与电流大小相关的比例系数。
kp是与阳极电压相关的系数,影响阳极电压对电流的系数
kvb是与栅极电压弯曲效应相关的系数(kvb这个着实是不太了解,欢迎大佬补充)
ex应该是I的指数
下面定义的变量含义为:
vpk是阳极电压
vgk是栅极电压
E1是有效电压
ipk是阳极电流
后面使用 V(函数给vpk和vgk赋值,V函数是获取端口之间的电压差,V(p, k) 返回阳极对于阴极的电压,V(g, k) 返回栅极对于阴极的电压
然后这个公式 E1 = vpk / kp ln(1 + exp(kp (1/mu + vgk / sqrt(kvb + vpk*vpk))))是在描述描述三极管在不同工作区域的特性(关于这个公式部分资料来源于百科,可能不准确,欢迎大佬补充)sqrt(kvb + vpk*vpk):是一个与阳极电压相关的项,用于避免在 vpk 接近零时出现数值问题,并模拟阳极电压对栅极有效控制的影响。1/mu + vgk / sqrt(...):组合栅极电压和阳极电压的影响,1/mu 是当栅压为零时的偏置项,exp(...) 和 ln(1+exp(...)) 的组合实现了平滑的“类二极管”开关特性,当内部参数较大时近似为线性(或幂律)区域,最后乘以 vpk/kp 使 E1 具有电压量纲,并受阳极电压调制。
最后的
if (E1 > 0) begin
ipk = (pow(E1, ex) / kg1) * 2;
end else begin
ipk = 0;
end
通过判断E1 的正负决定阳极电流,如果 E1 > 0,电流 ipk 按 E1 的 ex 次幂计算,除以 kg1 并乘以 2,否则,电流为零,模拟截止区。这里 pow(E1, ex) 是幂函数,ex是指数
I(p, k) <+ ipk 表示在阳极 p 和阴极 k 之间注入大小为 ipk 的电流
该段代码描述了三极管的工作原理
module and_gate(
input wire a,
input wire b,
output wire y
);
assign y= a & b;
endmodule
这一段输入了a和b,输出了y,y是a和b与运算的结果(也就是a&b),与运算的原理是同为高电平就是true,否则是false
这一段应该是与门
module FlipFlop (
input wire a,
input wire b,
input wire B,
output reg T = 1'b0,
output wire T_n
);
always @(negedge a or negedge b or negedge B) begin
if (!a)
T <= 1'b0;
else if (!b)
T <= 1'b1;
else if (!B)
T <= ~T;
end
assign T_n = ~T;
endmodule
这一段输入了a,b,B,输出了reg和wire
(always部分参考百科资料)
如果 a 为低电平(!a 为真),将 T 非阻塞赋值为 1'b0。这相当于异步清零(复位)。
否则如果 b 为低电平,将 T 赋值为 1'b1。这相当于异步置位。
否则如果 B 为低电平,将 T 取反(~T),即翻转。
assign T_n = ~T将 T_n 始终赋值为 T 的逻辑非,
这一串有可能是构建分频器、计数器或状态机中的异步控制单元。