Verilog硬件描述语言实用教案

上传人:莉**** 文档编号:60392219 上传时间:2022-03-07 格式:PPTX 页数:152 大小:2.95MB
返回 下载 相关 举报
Verilog硬件描述语言实用教案_第1页
第1页 / 共152页
Verilog硬件描述语言实用教案_第2页
第2页 / 共152页
Verilog硬件描述语言实用教案_第3页
第3页 / 共152页
点击查看更多>>
资源描述
1第1页/共151页第一页,共152页。2VerilogVerilog逻辑值逻辑值VerilogVerilog内采用四值逻辑,即内采用四值逻辑,即0 0,1 1,x x,z z。00表示表示0 0,低电平,假,逻辑低,地等。,低电平,假,逻辑低,地等。11表示表示1 1,高电平,真,逻辑高,电源等。,高电平,真,逻辑高,电源等。xx表示未被初始化的逻辑或未知逻辑值(无法确定的逻辑)。表示未被初始化的逻辑或未知逻辑值(无法确定的逻辑)。zz表示高阻状态,没有驱动的线等。表示高阻状态,没有驱动的线等。数字的表示数字的表示 整数的表示整数的表示widthradix valuewidthradix valuewidthwidth指明占用指明占用(zhn yn)(zhn yn)的二进制长度(可选),如果不指明的二进制长度(可选),如果不指明占用占用(zhn yn)(zhn yn)的长度,则长度为缺省值,通常可能是一个字长。的长度,则长度为缺省值,通常可能是一个字长。radixradix指明采用的基数(进制)指明采用的基数(进制) 十进制十进制decimal ( d or D )decimal ( d or D ) 十六进制十六进制hex ( h or H )hex ( h or H ) 八进制八进制octal ( o or O )octal ( o or O ) 二进制二进制binary ( b or B )binary ( b or B )value value 是在相应基数下的值。是在相应基数下的值。第2页/共151页第二页,共152页。3整数的表示举例整数的表示举例5O42 4D98haB-6b100_X1z10D-20 /错误错误(2+4)b011000 /错误。错误。实数实数(shsh)的表示的表示十进制表示十进制表示10.2123.456-34.5科学计数法表示科学计数法表示23_5.1e2 / 23510.0-6.2E6 / -6200000.03E-2 / 0.03第3页/共151页第三页,共152页。4字符串字符串 使用双引号括起来的多个使用双引号括起来的多个(du )(du )字符。字符。 不能跨行。不能跨行。 其中可使用反斜线其中可使用反斜线()()对特殊字符进行转义。对特殊字符进行转义。 举例举例“MESSAGE n”“MESSAGE n”“Finished ”“Finished ”VerilogVerilog数据类型数据类型VerilogVerilog中的数据类型有两大类,即线网(中的数据类型有两大类,即线网(netsnets)和变量)和变量(variablesvariables),表示数据的存储和传输元件。),表示数据的存储和传输元件。 线网:表示器件之间的物理连接,不保存数据值,由驱动元线网:表示器件之间的物理连接,不保存数据值,由驱动元件决定信号值。件决定信号值。 变量:表示抽象存储元件。变量:表示抽象存储元件。 线网和变量的定义中可以带有范围,形成向量。当定义时没线网和变量的定义中可以带有范围,形成向量。当定义时没有指定范围时认为宽度是有指定范围时认为宽度是1 1的标量。的标量。第4页/共151页第四页,共152页。5线网的种类线网的种类 线网需要被持续地驱动,驱动它的可以是门、模块或逻辑等。线网需要被持续地驱动,驱动它的可以是门、模块或逻辑等。 默认的初始值是默认的初始值是z z。 种类:种类: wire, tri wire, tri:标准的互连线,功能上相同。:标准的互连线,功能上相同。supply1, supply0supply1, supply0:电源和地。:电源和地。wor, triorwor, trior:通过线或连接的多个驱动。:通过线或连接的多个驱动。wand, triandwand, triand:通过线与连接的多个驱动。:通过线与连接的多个驱动。triregtrireg:有电容保存的线网。:有电容保存的线网。 tri1, tri0 tri1, tri0:在不驱动时上拉或下拉的线网。:在不驱动时上拉或下拉的线网。变量类型变量类型 保存原有的值直到赋予新的值。保存原有的值直到赋予新的值。 种类:种类:regreg:数据保存元件的抽象,向量可以表示无符号:数据保存元件的抽象,向量可以表示无符号(fho)(fho)整数,初整数,初值是值是x xintegerinteger:有符号:有符号(fho)32(fho)32位整数变量,初值是位整数变量,初值是x xrealreal:双精度带符号:双精度带符号(fho)(fho)浮点数,初值是浮点数,初值是0.00.0timetime:6464位无符号位无符号(fho)(fho)整数变量,初值是整数变量,初值是x x realtime realtime:与:与realreal内容一致,但可以被用做描述仿真的时间,初内容一致,但可以被用做描述仿真的时间,初值是值是0.00.0第5页/共151页第五页,共152页。6数组(数组(ArrayArray)VerilogVerilog中的线网或变量可以构成数组。中的线网或变量可以构成数组。 数组元素可以是标量数组元素可以是标量(bioling)(bioling)或向量。或向量。 数组的赋值只能对其中的一个元素进行,不能同时对整个数组或数组的赋值只能对其中的一个元素进行,不能同时对整个数组或其中的一部分段进行。其中的一部分段进行。 线网数组可以连接一组实体化模块的端口。线网数组可以连接一组实体化模块的端口。 对各种变量都可以定义变量类型的数组。对各种变量都可以定义变量类型的数组。 在过去的标准(在过去的标准(IEEE1364-1995IEEE1364-1995)中没有多维数组,用一维数组可)中没有多维数组,用一维数组可以定义寄存器阵列。新的标准(以定义寄存器阵列。新的标准(IEEE1364-2001IEEE1364-2001)中可以定义多维数)中可以定义多维数组。组。 一维数组定义一维数组定义regreg类型的阵列可以构成存储器,其格式如下:类型的阵列可以构成存储器,其格式如下:regMSB:LSB first_addr: last_addr;regMSB:LSB first_addr: last_addr;MSBMSB和和LSBLSB定义了存储器字的长度定义了存储器字的长度,memory_name,memory_name说明了存储器名说明了存储器名first_addrfirst_addr和和last_addrlast_addr定义了占用的地址空间定义了占用的地址空间, ,在定义中可以使用在定义中可以使用参数。参数。 其他的数组定义形式是类似的。其他的数组定义形式是类似的。第6页/共151页第六页,共152页。7数组举例数组举例integer NUMS7: 0; /8integer NUMS7: 0; /8个个integerinteger类型的变量构成的数组类型的变量构成的数组time time t_vals3: 0; / 4t_vals3: 0; / 4个个time time 类型的变量构成的数组类型的变量构成的数组reg15: 0 MEM0: reg15: 0 MEM0: 1023; /1K x 161023; /1K x 16位存储器位存储器reg7: 0 PREPhFFFE:hFFFF;/ 2 x 8reg7: 0 PREPhFFFE:hFFFF;/ 2 x 8位存储器位存储器parameter wordsize= 16;parameter wordsize= 16;parameter memsize= 1024;parameter memsize= 1024;regwordsize-1: 0 MEM3memsize-1: 0;/ regwordsize-1: 0 MEM3memsize-1: 0;/ 使用参数的定义。使用参数的定义。参数参数 参数不属于变量或线网,它们表示参数不属于变量或线网,它们表示(biosh)(biosh)一些常数,控制设计中一些常数,控制设计中使用的参数。使用的参数。 参数的定义是局部化的,只在本模块中有效。参数的定义是局部化的,只在本模块中有效。 可以在任何使用文字数量的地方使用。可以在任何使用文字数量的地方使用。 参数有两类,模块参数和参数有两类,模块参数和specifyspecify参数。参数。 模块参数可以在设计时进行调整。模块参数可以在设计时进行调整。第7页/共151页第七页,共152页。8参数的定义参数的定义(dngy)(dngy)parameter parameter list_ of_ assignments list_ of_ assignments 是用逗号隔开的参数和它们的数值是用逗号隔开的参数和它们的数值举例举例parameterparametercycle = 8,cycle = 8,real_ constant = 2.039,real_ constant = 2.039,x_ word = 16bx,x_ word = 16bx,file = /usr1/jdough/design/mem_file.dat;file = /usr1/jdough/design/mem_file.dat;第8页/共151页第八页,共152页。9运算符运算符(Operators)(Operators) 算术运算符算术运算符(+,-,(+,-,* *,/,%),/,%) 关系运算符关系运算符(,=,=,=) 等式运算符等式运算符(= =,!=,= = =,!= =)(= =,!=,= = =,!= =) 逻辑逻辑(lu j)(lu j)运算符运算符(&,|,!)(&,|,!) 条件运算符条件运算符(?:)(?:) 位运算符位运算符(,|,&,)(,|,&,) 移位运算符移位运算符()() 拼接运算符拼接运算符()() 赋值运算符赋值运算符(=,=)(=,=)第9页/共151页第九页,共152页。10等式运算符等式运算符(= =,!=,= = =,!= =)(= =,!=,= = =,!= =)= = =:逻辑相等:逻辑相等!=!=:逻辑不等:逻辑不等= = = = =:全等(对:全等(对x x和和z z严格严格(yng)(yng)按位比较)按位比较)!= =!= =:非全等:非全等 说明说明= = = = 与与= = = = = = 的差别:的差别:第10页/共151页第十页,共152页。11运算运算(yn sun)的优先级的优先级第11页/共151页第十一页,共152页。12VerilogVerilog的层次结构的层次结构modulemodulemodulemodule是是VerilogVerilog中的基本单位。中的基本单位。 一个一个(y )module(y )module可以是一个可以是一个(y )(y )物理模块,一个物理模块,一个(y )(y )逻辑模块或一个逻辑模块或一个(y )(y )完整的系统。完整的系统。BNFBNF表达式表达式:= module ;:= module ; * *endmoduleendmodule第12页/共151页第十二页,共152页。13模块的实体化模块的实体化 必须有实体名必须有实体名 端口信号的映射可以有两种:端口信号的映射可以有两种:按位置映射:次序与模块说明时端口次序相同按位置映射:次序与模块说明时端口次序相同按名映射:与位置无关,通过指定端口的内部名和外部名建立联系,格式按名映射:与位置无关,通过指定端口的内部名和外部名建立联系,格式(g shi)(g shi)为:为:.internal_ port_ name( external_ name_ of_ signal_ connected_ to_ .internal_ port_ name( external_ name_ of_ signal_ connected_ to_ port)port) 可以存在没有连接的端口,但可能产生警告信息可以存在没有连接的端口,但可能产生警告信息模块实体化举例模块实体化举例module comp (o1, o2, i1, i2);module comp (o1, o2, i1, i2); output o1, o2; output o1, o2; input i1, i2; input i1, i2; . . . . . .endmoduleendmodulemodule test;module test;comp c1 (Q, R, J, K); / comp c1 (Q, R, J, K); / 按位置映射按位置映射comp c2 (. i2( K),. o1( Q),. o2( R),. i1( J); / comp c2 (. i2( K),. o1( Q),. o2( R),. i1( J); / 按名映射按名映射comp c3 (Q, J, K); / comp c3 (Q, J, K); / 按位置映射,有一个端口未连接按位置映射,有一个端口未连接comp c4 (. i1( J),. o1( Q); /comp c4 (. i1( J),. o1( Q); /按名映射,按名映射,2 2个端口未连接个端口未连接endmoduleendmodule第13页/共151页第十三页,共152页。14第14页/共151页第十四页,共152页。15过程过程(guchng)(guchng)赋值赋值 过程过程(guchng)(guchng)赋值:在过程赋值:在过程(guchng)(guchng)块内的赋值块内的赋值 过程过程(guchng)(guchng)赋值针对赋值针对variablevariable类型的数据类型的数据 要赋予的值可以是任何合法的表达式要赋予的值可以是任何合法的表达式 过程过程(guchng)(guchng)赋值可以分成:赋值可以分成:阻塞赋值:串行执行,只有执行完了前一条语句,后一条语句才能执行。阻塞赋值:串行执行,只有执行完了前一条语句,后一条语句才能执行。非阻塞赋值:并行执行,一组赋值语句之间没有前后顺序关系,它们在同一时刻开始计算非阻塞赋值:并行执行,一组赋值语句之间没有前后顺序关系,它们在同一时刻开始计算右值表达式,即不等当前语句执行完,即开始执行下一条语句。右值表达式,即不等当前语句执行完,即开始执行下一条语句。第15页/共151页第十五页,共152页。16阻塞过程赋值举例阻塞过程赋值举例(j l)(j l)(= =)module adder (out, a, b, cin);module adder (out, a, b, cin); input a, b, cin; input a, b, cin; output 1: 0 out; output 1: 0 out; wire a, b, cin; wire a, b, cin;reg half_ sum, half_ carry ;reg half_ sum, half_ carry ; reg1: 0 out; reg1: 0 out; always ( a or b or cin) always ( a or b or cin) begin begin half_ sum = a b cin; / OK half_ sum = a b cin; / OK half_ carry = a & b | a & !b & cin| !a half_ carry = a & b | a & !b & cin| !a & b & cin; & b & cin; out = half_ carry, half_ sum ; / out = half_ carry, half_ sum ; / 半半加和与进位加和与进位 end endendmoduleendmodule第16页/共151页第十六页,共152页。17非阻塞过程非阻塞过程(guchng)(guchng)赋值举例(赋值举例(=)module swap_ vals;module swap_ vals; reg a, b, clk; reg a, b, clk; initial initial begin begin a = 0; a = 0; b = 1; b = 1; clk= 0; clk= 0; end end always #5 clk= clk; always #5 clk= clk; always ( posedge clk) always ( posedge clk) begin begin a = b; / a = b; / 非阻塞过程非阻塞过程(guchng)(guchng)赋值赋值 b = a; / b = a; / 交换交换a a和和b b的值的值 end endendmoduleendmodule第17页/共151页第十七页,共152页。18持续赋值(持续赋值(Continuous Assignment Continuous Assignment ) 持续赋值在过程块之外进行持续赋值在过程块之外进行 赋值对象是线网(赋值对象是线网(netnet) 采用的格式如下:采用的格式如下: #delay strength = #delay strength = 当等号右边信号的表达式发生变化后当等号右边信号的表达式发生变化后, ,经过经过#delay #delay 规定的延迟规定的延迟, ,等号左边等号左边(zu bian)(zu bian)信号发生变化。信号发生变化。 可以有隐式(可以有隐式(implicitimplicit)和显式()和显式(explicitexplicit)两种)两种赋值方式。如下例所示:赋值方式。如下例所示:wire out;wire out;assign out = a & b; / assign out = a & b; / 显式显式wire inv = in; / wire inv = in; / 隐式隐式第18页/共151页第十八页,共152页。19时间控制时间控制 在在VerilogVerilog语言中时间控制可以分成三类:语言中时间控制可以分成三类:简单延迟(简单延迟(# # ):延迟若干时间单位。):延迟若干时间单位。边沿敏感时间控制(边沿敏感时间控制(()()):等待信号的边沿,可以使用):等待信号的边沿,可以使用oror指定几个变量指定几个变量(binling)(binling)。 正边沿:正边沿:posedgeposedge 负边沿:负边沿:negedgenegedge 任意边沿:任意边沿:电平敏感时间控制(电平敏感时间控制(wait()wait()):等待表达式成立,如果表达式已经成立立即执行相):等待表达式成立,如果表达式已经成立立即执行相应动作。应动作。第19页/共151页第十九页,共152页。20endmodule第20页/共151页第二十页,共152页。21第21页/共151页第二十一页,共152页。22第22页/共151页第二十二页,共152页。23第23页/共151页第二十三页,共152页。24第24页/共151页第二十四页,共152页。25第25页/共151页第二十五页,共152页。26第26页/共151页第二十六页,共152页。27开始开始 begin begin $display( Note : Index is $display( Note : Index is zero);zero); result = regb; result = regb; end end else else $display( Note : Index is $display( Note : Index is negative);negative);第27页/共151页第二十七页,共152页。28第28页/共151页第二十八页,共152页。29 $display ( no $display ( no match);match); end end endcase endcaseendmoduleendmodule第29页/共151页第二十九页,共152页。30第30页/共151页第三十页,共152页。31第31页/共151页第三十一页,共152页。32第32页/共151页第三十二页,共152页。33第33页/共151页第三十三页,共152页。34第34页/共151页第三十四页,共152页。35第35页/共151页第三十五页,共152页。36第36页/共151页第三十六页,共152页。37第37页/共151页第三十七页,共152页。38第38页/共151页第三十八页,共152页。39第39页/共151页第三十九页,共152页。40第40页/共151页第四十页,共152页。41第41页/共151页第四十一页,共152页。42第42页/共151页第四十二页,共152页。43第43页/共151页第四十三页,共152页。44第44页/共151页第四十四页,共152页。45第45页/共151页第四十五页,共152页。46第46页/共151页第四十六页,共152页。47第47页/共151页第四十七页,共152页。48第48页/共151页第四十八页,共152页。49第49页/共151页第四十九页,共152页。50第50页/共151页第五十页,共152页。51第51页/共151页第五十一页,共152页。52第52页/共151页第五十二页,共152页。53第53页/共151页第五十三页,共152页。54第54页/共151页第五十四页,共152页。55第55页/共151页第五十五页,共152页。56第56页/共151页第五十六页,共152页。57第57页/共151页第五十七页,共152页。58第58页/共151页第五十八页,共152页。59第59页/共151页第五十九页,共152页。60第60页/共151页第六十页,共152页。61第61页/共151页第六十一页,共152页。62第62页/共151页第六十二页,共152页。63第63页/共151页第六十三页,共152页。64第64页/共151页第六十四页,共152页。65第65页/共151页第六十五页,共152页。66第66页/共151页第六十六页,共152页。67第67页/共151页第六十七页,共152页。68第68页/共151页第六十八页,共152页。69第69页/共151页第六十九页,共152页。70第70页/共151页第七十页,共152页。71第71页/共151页第七十一页,共152页。72第72页/共151页第七十二页,共152页。73第73页/共151页第七十三页,共152页。74第74页/共151页第七十四页,共152页。75第75页/共151页第七十五页,共152页。76第76页/共151页第七十六页,共152页。77第77页/共151页第七十七页,共152页。78第78页/共151页第七十八页,共152页。79第79页/共151页第七十九页,共152页。80第80页/共151页第八十页,共152页。81第81页/共151页第八十一页,共152页。82第82页/共151页第八十二页,共152页。83第83页/共151页第八十三页,共152页。84第84页/共151页第八十四页,共152页。85块的敏感表块的敏感表对一个组合块的所有输入变量(包括判断条件),应当将它们都列在敏感表中。对一个组合块的所有输入变量(包括判断条件),应当将它们都列在敏感表中。不同的综合器对不完全的敏感表的处理方式不同的综合器对不完全的敏感表的处理方式(fngsh)是不同的,有些按非法处理,有些给是不同的,有些按非法处理,有些给出警告信息并按完全的敏感表处理,这时综合后网表的模拟结果可能与开始的出警告信息并按完全的敏感表处理,这时综合后网表的模拟结果可能与开始的RTL描述不同。描述不同。敏感表举例:敏感表举例:module sens(q, a, b, sl); input a, b, sl; output q; reg q; always (sl) / 不完全的敏感表不完全的敏感表 / always (sl or a or b) / 完全的敏感表完全的敏感表 begin if (! sl) q = a; else q = b; endendmodule第85页/共151页第八十五页,共152页。86第86页/共151页第八十六页,共152页。87第87页/共151页第八十七页,共152页。88第88页/共151页第八十八页,共152页。89第89页/共151页第八十九页,共152页。90第90页/共151页第九十页,共152页。91第91页/共151页第九十一页,共152页。92第92页/共151页第九十二页,共152页。93第93页/共151页第九十三页,共152页。94第94页/共151页第九十四页,共152页。95第95页/共151页第九十五页,共152页。96第96页/共151页第九十六页,共152页。97第97页/共151页第九十七页,共152页。98第98页/共151页第九十八页,共152页。99第99页/共151页第九十九页,共152页。100第100页/共151页第一百页,共152页。101第101页/共151页第一百零一页,共152页。102第102页/共151页第一百零二页,共152页。103第103页/共151页第一百零三页,共152页。104第104页/共151页第一百零四页,共152页。105 endendmodule第105页/共151页第一百零五页,共152页。106 else state = nextstate; end第106页/共151页第一百零六页,共152页。107 begin nextstate= stateB; out = 2b00; end end default: begin nextstate= stateA; out = 2b00; end endcase endendmodule第107页/共151页第一百零七页,共152页。108第108页/共151页第一百零八页,共152页。109 end endcase end第109页/共151页第一百零九页,共152页。110 end endcase end第110页/共151页第一百一十页,共152页。111第111页/共151页第一百一十一页,共152页。112第112页/共151页第一百一十二页,共152页。113第113页/共151页第一百一十三页,共152页。114第114页/共151页第一百一十四页,共152页。115第115页/共151页第一百一十五页,共152页。116第116页/共151页第一百一十六页,共152页。117第117页/共151页第一百一十七页,共152页。118第118页/共151页第一百一十八页,共152页。119第119页/共151页第一百一十九页,共152页。120第120页/共151页第一百二十页,共152页。121系统总体结构系统总体结构可移动高性能电脑加密机的硬件主要由加密芯片、可移动高性能电脑加密机的硬件主要由加密芯片、USBUSB接口芯片接口芯片以及晶体振荡器等元器件构成,其中加密芯片又包括以及晶体振荡器等元器件构成,其中加密芯片又包括AESAES加密加密/ /解解密模块、密模块、RSARSA加密加密/ /解密模块和控制模块。解密模块和控制模块。可移动高性能电脑加密机的软件主要包括加密机控制软件和可移动高性能电脑加密机的软件主要包括加密机控制软件和USBUSB驱动软件等。驱动软件等。其系统结构图见下页。其系统结构图见下页。系统功能描述系统功能描述可移动高性能电脑加密机可用于进行信息加密可移动高性能电脑加密机可用于进行信息加密/ /解密和数字签名。解密和数字签名。具体工作流程是:将可移动高性能电脑加密机插入具体工作流程是:将可移动高性能电脑加密机插入(ch r)(ch r)电电脑的脑的USBUSB接口,在加密机控制软件的控制下,将存储在接口,在加密机控制软件的控制下,将存储在PCPC机上的各机上的各种信息文件传输至电脑加密机进行加解密处理或数字签名,并将种信息文件传输至电脑加密机进行加解密处理或数字签名,并将加解密或数字签名后的结果文件传输回加解密或数字签名后的结果文件传输回PCPC机保存。机保存。 第121页/共151页第一百二十一页,共152页。122第122页/共151页第一百二十二页,共152页。123第123页/共151页第一百二十三页,共152页。124第124页/共151页第一百二十四页,共152页。125第125页/共151页第一百二十五页,共152页。126第126页/共151页第一百二十六页,共152页。127第127页/共151页第一百二十七页,共152页。128。S4S4:明文装载状态。需要控制的信号:明文装载状态。需要控制的信号:loadload、addressaddress、dindin、SLOESLOE、SLRDSLRD、FIFOADRFIFOADR。S5S5:加密状态。需要控制的信号:加密状态。需要控制的信号:staencstaenc。第128页/共151页第一百二十八页,共152页。129S9S9:解密状态:需要控制的信号:解密状态:需要控制的信号:stadecstadec。S10S10:解密结果输出状态。需要控制的信号:解密结果输出状态。需要控制的信号:shiftshift、FDFD、SLWRSLWR、FIFOADRFIFOADR。第129页/共151页第一百二十九页,共152页。130第130页/共151页第一百三十页,共152页。131第131页/共151页第一百三十一页,共152页。132第132页/共151页第一百三十二页,共152页。133第133页/共151页第一百三十三页,共152页。134module usb_aes_intf(clk,rst,full,empty,fd,keyexprdy, encdecrdy,dout, load,address, keyexpen, staenc,stadec,din,shift, sloe,slrd,slwr,fifoadr); input clk,rst,full,empty,keyexprdy,encdecrdy; inout 15:0 fd; input 15:0 dout;output load,keyexpen,staenc,stadec, shift,sloe,slrd,slwr;output 7:0 address; output 15:0 din; output 1:0 fifoadr; 第134页/共151页第一百三十四页,共152页。135 reg 10:0 cur_state,nxt_state,state_delay;reg 4:0 con_word; /con_word=5b10000,goto KEY_LOAD state, /con_word=5b01000,goto ENC_SBOX_CFG state,/con_word=5b00100,goto PTEXT_LOAD state, /con_word=5b00010,goto DEC_SBOX_CFG state,/con_word=5b00001,goto CTEXT_LOAD state. reg 15:0 usb_in_data,aes_in_data;wire aes_in_reg_en,data_to_usb_en,key_load_end, key_expand_end,enc_sbox_cfg_end,ptext_load_end;wire encrypt_end,enc_result_out_end,dec_sbox_cfg_end;wire ctext_load_end,decrypt_end,dec_result_out_end;reg slrd,load,slwr; reg 6:0 wordcount;wire con_reg_en,writefifo,sloe;wire 1:0 fifoadr;reg 7:0 address1,address; 第135页/共151页第一百三十五页,共152页。136 parameter INITIAL = 11b100_0000_0000, KEY_LOAD = 11b000_0000_0001, KEY_EXPAND = 11b000_0000_0010, ENC_SBOX_CFG = 11b000_0000_0100, PTEXT_LOAD = 11b000_0000_1000, ENCRYPT = 11b000_0001_0000, ENC_RESULT_OUT = 11b000_0010_0000, DEC_SBOX_CFG = 11b000_0100_0000, CTEXT_LOAD = 11b000_1000_0000, DECRYPT = 11b001_0000_0000, DEC_RESULT_OUT = 11b010_0000_0000; 第136页/共151页第一百三十六页,共152页。137 /control word registeralways (posedge clk)if(rst)con_word = 5d0; elseif(con_reg_en)con_word = fd4:0;else if(con_word != 5d0) con_word = 5d0; else con_word = con_word;第137页/共151页第一百三十七页,共152页。138/usb in data registeralways (posedge clk) if(rst) usb_in_data = 16d0; else if(slrd=0) usb_in_data = fd; else usb_in_data = usb_in_data; 第138页/共151页第一百三十八页,共152页。139/aes in data registeralways (posedge clk) if(rst) aes_in_data = 16d0; else if(aes_in_reg_en)aes_in_data = dout; elseaes_in_data = aes_in_data;assign aes_in_reg_en=encdecrdy|shift;/fd is bidirection databus assign fd = data_to_usb_en? aes_in_data : 16bzzzz_zzzz_zzzz_zzzz;assign data_to_usb_en=(cur_state=ENC_RESULT_OUT)| (cur_state=DEC_RESULT_OUT); 第139页/共151页第一百三十九页,共152页。140/main FSMalways (posedge clk) if(rst) cur_state = INITIAL; else cur_state = nxt_state;always (cur_state or con_word or key_load_end or key_expand_end or enc_sbox_cfg_end or ptext_load_end or encrypt_end or enc_result_out_end or dec_sbox_cfg_end or ctext_load_end or decrypt_end or dec_result_out_end) case(cur_state) INITIAL: case(con_word) 5b10000: nxt_state = KEY_LOAD; 5b01000: nxt_state = ENC_SBOX_CFG; 5b00100: nxt_state = PTEXT_LOAD; 5b00010: nxt_state = DEC_SBOX_CFG; 5b00001: nxt_state = CTEXT_LOAD; default: nxt_state = INITIAL; endcase 第140页/共151页第一百四十页,共152页。141 KEY_LOAD: if(key_load_end)nxt_state = KEY_EXPAND; elsenxt_state = KEY_LOAD; KEY_EXPAND: if(key_expand_end)nxt_state = INITIAL; elsenxt_state = KEY_EXPAND; ENC_SBOX_CFG: if(enc_sbox_cfg_end)nxt_state = INITIAL; elsenxt_state = ENC_SBOX_CFG; PTEXT_LOAD:if(ptext_load_end)nxt_state = ENCRYPT; else nxt_state = PTEXT_LOAD; 第141页/共151页第一百四十一页,共152页。142 ENCRYPT:if(encrypt_end)nxt_state = ENC_RESULT_OUT; elsenxt_state = ENCRYPT; ENC_RESULT_OUT:if(enc_result_out_end)nxt_state = INITIAL; elsenxt_state = ENC_RESULT_OUT;DEC_SBOX_CFG: if(dec_sbox_cfg_end)nxt_state = INITIAL; elsenxt_state = DEC_SBOX_CFG;CTEXT_LOAD: if(ctext_load_end)nxt_state = DECRYPT; elsenxt_state = CTEXT_LOAD; 第142页/共151页第一百四十二页,共152页。143 DECRYPT: if(decrypt_end)nxt_state = DEC_RESULT_OUT; elsenxt_state = DECRYPT;DEC_RESULT_OUT:if(dec_result_out_end)nxt_state = INITIAL; elsenxt_state = DEC_RESULT_OUT;default: nxt_state = INITIAL; endcase 第143页/共151页第一百四十三页,共152页。144 assign key_load_end=(wordcount=7d7);assign key_expand_end=keyexprdy;assign enc_sbox_cfg_end=(wordcount=7d127);assign ptext_load_end=(wordcount=7d7);assign encrypt_end=encdecrdy;assign enc_result_out_end=(wordcount=7d7);assign dec_sbox_cfg_end=(wordcount=7d127);assign ctext_load_end=(wordcount=7d7);assign decrypt_end=encdecrdy;assign dec_result_out_end=(wordcount=7d7); 第144页/共151页第一百四十四页,共152页。145 /produce slrdalways (cur_state or rst or empty or wordcount)case(cur_state)INITIAL: if(empty=1)&(wordcount=0)&(rst=0)slrd = 1b0; elseslrd = 1b1; KEY_LOAD: if(empty=1)&(wordcount=7d7)slrd = 1b0; elseslrd = 1b1; ENC_SBOX_CFG: if(empty=1)&(wordcount=7d127)slrd = 1b0; elseslrd = 1b1; 第145页/共151页第一百四十五页,共152页。146 PTEXT_LOAD:if(empty=1)&(wordcount=7d7)slrd = 1b0; elseslrd = 1b1; DEC_SBOX_CFG: if(empty=1)&(wordcount=7d127)slrd = 1b0; elseslrd = 1b1;CTEXT_LOAD: if(empty=1)&(wordcount=7d7)slrd = 1b0; elseslrd = 1b1;default: slrd = 1b1; endcase 第146页/共151页第一百四十六页,共152页。147/wordcount registeralways (posedge clk)if(rst) wordcount = 7d0; else if(cur_state != nxt_state) wordcount = 7d0; else if(slrd=0)|(slwr=0) wordcount = wordcount+7b1; else wordcount = wordcount; assign con_reg_en=(cur_state=INITIAL)&(slrd=0);assign fifoadr=(writefifo=1)? 2b10:2b0;assign writefifo=(cur_state=ENC_RESULT_OUT)| (cur_state=DEC_RESULT_OUT);assign sloe=(writefifo=1)? 1b1:1b0; 第147页/共151页第一百四十七页,共152页。148 /produce load,address,din assign din=usb_in_data; always(posedge clk) if(rst) load = 1b0; else load = (slrd)&(cur_state!=INITIAL); always (cur_state or wordcount)case(cur_state) KEY_LOAD: address1=8d128;ENC_SBOX_CFG: address1=wordcount; PTEXT_LOAD:address1=8d128; DEC_SBOX_CFG: address1=wordcount;CTEXT_LOAD: address1=8d128; default: address1=8d128; endcase第148页/共151页第一百四十八页,共152页。149always(posedge clk) address = address1;/delay state 1 cycle.always (posedge clk)begin if(rst) state_delay=11d0; else state_delay=cur_state;end assign keyexpen=(cur_state=KEY_EXPAND)& (state_delay!=KEY_EXPAND)?1b1:1b0;assign staenc= (cur_state=ENCRYPT)& (state_delay!=ENCRYPT)?1b1:1b0;assign stadec= (cur_state=DECRYPT)& (state_delay!=DECRYPT)?1b1:1b0; 第149页/共151页第一百四十九页,共152页。150always (cur_state or full or wordcount)case(cur_state) ENC_RESULT_OUT: if(full=1)&(wordcount=7d7)slwr = 1b0; elseslwr = 1b1; DEC_RESULT_OUT: if(full=1)&(wordcount=7d7)slwr = 1b0; elseslwr = 1b1; default: slwr = 1b1; endcaseassign shift=(slwr&(wordcount=7d6)|encdecrdy;endmodule 第150页/共151页第一百五十页,共152页。151谢谢您的观看(gunkn)!第151页/共151页第一百五十一页,共152页。NoImage内容(nirng)总结1。“Finished ”。线网需要被持续地驱动,驱动它的可以是门、模块或逻辑等。按位置映射:次序与模块说明时端口次序相同。通常是在使用它们的局部作用域开始(kish)处定义它们。例如:include parts/count.v。本例中两个时钟边沿产生两个存储元件,rega不会被优化掉。timescale 1ns/1ns。对case来说是条件分支齐全,可以利用default项指定未定义分支的操作。谢谢您的观看第一百五十二页,共152页。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!