用modelsim仿真基本流程:
一、独热码状态机
代码以及测试代码如下:
module ex8_1(clock,reset, x,y1,y2);
input clock,reset;
input x;
output y1,y2;
reg y1,y2;
reg[3:0] cstate, nstate;
parameter
s0=4’b0001,
s1=4’b0010,
s2=4’b0100,
s3=4’b1000;
always @(posedge clock or posedge reset)
begin
if(reset)
cstate<=s0;
else
cstate<=nstate;
end
always @(cstate or x)
begin
case(cstate)
s0 : begin
if(x0)
nstate=s1;
else
nstate=s3;
end
s1:begin
if(x0)
nstate=s2;
else
nstate=s0;
end
s2 : begin
if(x0)
nstate=s3;
else
nstate=s1;
end
s3 :begin
if(x0)
nstate=s0;
else
nstate=s2;
end
default:nstate=s0;
endcase
end
always @(cstate or x)
begin
case(cstate)
s0 : begin
if(x0)
y1=1;
else
y1=0;
end
s1 :begin
if(x0)
y1=0;
else
y1=0;
end
s2 : begin
if(x0)
y1=0;
else
y1=0;
end
s3 : begin
if(x0)
y1=0;
else
y1=1;
end
default:y1=0;
endcase
end
always @(cstate or x)
begin
if(cstates0 &&x0)
y2=1;
else if(cstates3 && x1)
y2=1;
else
y2=0;
end
endmodule
测试代码:
第一个测试代码tb_ex81;
reg x,clock, reset;
wire yl, y2;
initial clock=0;
always #5clock=~clock;
initial
begin
reset=0;
#15 reset=1;

#15 reset=0;
#10000 $stop;
end
initial
begin
#10 x=1;
#500 x=0;
end
ex8_1 myex81(clock, reset,x,yl,y2);
endmodule

1.创建两个测文件,并编写代码。
2.进行编译:
点击compile,编译完成在文件后会有✔提示。
3.点击work,只需编译测试文件,如图:

4.将sim中的测试代码加入到wave:

5.点击run,开始测试

6.测试结果如图:

二:SR锁存器延迟模型
代码以及测试代码如下:

module my_rs(reset,set,q,qbar);
input reset, set;
output q, qbar;
nor #(1) nl(g, reset, gbar);
nor #(1) n2 (qbar, set, a);
endmodule
测试代码:
module tb_71;
reg set, reset;
wire q, qbar;
initial
begin
set<=0;reset<=1;
#10 set<=0;reset<=0;
#10 set<=1;reset<=0;
#10 set<=1;reset<=1;
end
my_rs rsl(reset, set,q,qbar);
initial
monitor(monitor(monitor(time, “set= %b, reset= %b,q= %b,qbar= %b”,set,reset, g, qbar);
endmodule
3.重复上诉步骤
4.结果如图:

三、移位除法器模型
代码及测试代码:
源代码 : module div2(clk, reset, start, A, B, D, R, ok, err);
parameter n = 32;
parameter m = 16;

input clk, reset, start;
input [n-1:0] A, B;
output [n+m-1:0] D;
output [n-1:0] R;
output ok, err;

wire invalid, carry, load, run;

div_ctl UCTL(clk, reset, start, invalid, carry, load, run, err, ok);
div_datapath UDATAPATH(clk, reset, A, B, load, run, invalid, carry, D, R);

endmodule

module div_ctl(clk, reset, start, invalid, carry, load, run, err, ok);
parameter n = 32;
parameter m = 16;
parameter STATE_INIT = 3’b001;
parameter STATE_RUN = 3’b010;
parameter STATE_FINISH = 3’b100;
input clk, reset, start, invalid, carry;
output load, run, err, ok;

reg [2:0] current_state, next_state;
reg [5:0] cnt;
reg load, run, err, ok;

always @(posedge clk or negedge reset)
begin
if(!reset) begin
current_state <= STATE_INIT;
cnt <= 0;
end else begin
current_state <= next_state;
if(run) cnt <= cnt + 1’b1;
end
end

always @(posedge clk or negedge reset)
begin
if(!reset) begin
err <= 0;
end else if(next_state==STATE_RUN) begin
if(invalid) err <= 1;
end
end

always @(current_state or start or invalid or carry or cnt)

begin
load <= 1’b0;
ok <= 1’b0;
run <= 1’b0;

  case(current_state)STATE_INIT: beginif(start) next_state <= STATE_RUN;else next_state <= STATE_INIT;load <= 1;endSTATE_RUN : beginrun <= 1;if(invalid) beginnext_state <= STATE_FINISH;   end else if(cnt==(n+m-1)) beginnext_state <= STATE_FINISH;    end else beginnext_state <= STATE_RUN;endendSTATE_FINISH : beginok <= 1;next_state <= STATE_FINISH;    enddefault : beginnext_state <= STATE_INIT;    endendcase

end
endmodule

module div_datapath(clk, reset, A, B, load, run, invalid, carry, D, R);
parameter n = 32;
parameter m = 16;
input clk, reset;
input [n-1:0] A, B;
input load, run;
output invalid, carry;
output [n+m-1:0] D;
output [n-1:0] R;

reg [n+n+m-2:0] R0;
reg [n+m-1:0] D;
reg [n-1:0] B0;
reg carry;

wire invalid;
wire [n-1:0] DIFF, R;
wire CO;

assign R = {carry, R0[n+n+m-2:n+m]};
assign invalid = (B0==0);

sub sub(R0[n+n+m-2:n+m-1], B0, 1’b0, DIFF, CO);

always @(posedge clk)
begin
if(load) begin
R0 <= {{(n-1){1’b0}}, A, {m{1’b0}}};
B0 <= B;
carry <= 1’b0;
end
else if(run) begin
if(CO && !carry) begin
R0 <= { R0, 1’b0 };
D <= { D[n+m-2:0], 1’b0 };
carry <= R0[n+n+m-2];
end else begin
R0 <= { DIFF, R0[n+m-2:0], 1’b0 };
D <= { D[n+m-2:0], 1’b1 };
carry <= DIFF[n-1];
end
end
end
endmodule

module sub(A, B, CI, DIFF, CO);
parameter n = 32;
input [n-1:0] A, B;
input CI;
output [n-1:0] DIFF;
output CO;

assign {CO, DIFF} = {1’b0, A} - {1’b0, B} - {{n{1’b0}}, CI};
endmodule
测试代码:
测试代码: `timescale 1ns/10ps
module tb_div2;
parameter n = 32;
parameter m = 16;

reg clk, reset;
reg start;
wire [n+m-1:0] D;
wire [n-1:0] R;
wire err, ok;
integer i;

reg [n-1:0] dividend;
reg [n-1:0] divisor;
reg [n+m-1:0] quotient;
reg [n-1:0] remainder;

div2 UDIV(clk, reset, start, dividend, divisor, D, R, ok, err);

function [n+n+(n+m)+(n)-1:0] gen_rand_data;

   input integer i;reg [n+m-1:0] dividend;reg [n+m-1:0] divisor;reg [n+m-1:0] quotient;reg [n+m-1:0] remainder;integer k;integer flag;begink = (i/4) % 32 + 1;flag = 1;           while(flag)begindividend = {{$random}, {m{1'b0}}};     divisor =  {{m{1'b0}}, {$random}};    divisor = divisor % ( 2 << k);           if(divisor == {(n+m){1'b0}})begin$display("Divisor is zero!!!");end else beginflag = 0;endquotient =  dividend / divisor;remainder = dividend % divisor;          if(remainder > divisor)                 begin$display("Bad remainder!!!"); $stop;endif(quotient * divisor + remainder != dividend)     begin$display("bad values!!!");$stop;endendgen_rand_data = {dividend[n+m-1:m], divisor[n-1:0], quotient, remainder[n-1:0]};end
endfunction

initial
begin
clk=0;
forever
#10 clk=~clk;
end

initial
begin
reset = 0;
start = 0;
for(i=1; i<=1000; i=i+1)
begin
{dividend, divisor, quotient, remainder} = gen_rand_data(i);
@(posedge clk);
reset = 0;
@(posedge clk);
reset = 1;
start = 1;
@(posedge ok);
if(quotient!=D || remainder!=R)
begin
$display(“BAD RESULT!!!”);
$display(“result: quotient=48’d%d, remainder=32’d%d”, D, R);
$stop;
end
end

  $stop;

end
endmodule
结果如图:

独热码状态机、SR锁存器延迟模型、移位除法器模型相关推荐

  1. Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码

    一般的,在Verilog中最常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码. 二进制码和格雷码是压缩状态编码. 若使用格雷编码,则相邻状态转 ...

  2. 状态机与独热码、格雷码、二进制码

    状态机 简称FSM,也叫同步有限状态机 同步:同步的意思就是在系统时钟的作用下 有限:有限代表状态机中的状态是有限的 根据影响输出分为两大类,一为Moore.二为Mealy Moore:若最后的输出只 ...

  3. 【Verilog基础】为什么状态机中多使用独热码,而不是二进制码或者格雷码?

    为什么例子中我们使用的是独热码而非二进制码或格雷码呢? 那就要从每种编码的特性上说起了,首先独热码因为每个状态只有 1bit 是不同的,例如在执行到(state== TWO)这条语句时,综合器会识别出 ...

  4. verilog中状态机的三种编码方式的比较(二进制码、独热码、格雷码)

    最近做了一个小项目,是关于状态机中三种编码方式的比较,总结了一下三种编码方式的不同,可以会在以后IC笔试面试过程中用到,简单记录一下三种编码方式的优缺点. 三种编码方式如下图所示:其中独热码只有一位为 ...

  5. HDLBits(十 三)学习笔记——Building Lager Circuits (1000计数器 —— FSM:One-hot logic equations独热码)

    文章目录 1.Counter with period 1000 2.4-bit shift register and down counter(移位寄存器) 3.fsmseq 序列1101识别器 4. ...

  6. HDLBits 系列(37)此系列关于独热码的题目的疑问?

    目录 背景 我的做法 第一题 第二题 第三题 解决办法 第一题 第二题 第三题 推荐 背景 目前为止,关于状态机独热码的题目,几乎没一个题目能做对,这令我疑惑?是不是题目的答案有问题?在此请大家一试? ...

  7. HDLBits 系列(25)独热码有限状态机实现的简单方式

    目录 原题重现 一点解释 最终实现 原题重现 The following is the state transition table for a Moore state machine with on ...

  8. FPGA中有限状态机的状态编码采用格雷码还是独热码?

    今天看<从算法设计到硬件逻辑的实现>这本电子书时,遇到了一个问题,就是有限状态机的编写中,状态编码是采用格雷码还是独热码呢?究竟采用哪一种编码呢? 采用独热码为什么节省许多组合电路? 等等 ...

  9. FPGA学习笔记---二进制码、独热码、格雷码分析对比

    在Verilog学习中常用的编码方式有二进制编码(Binary).格雷码(Gray-code)编码.独热码(One-hot)编码,对于新手来说,搞不清楚编码为什么要分这么多格式?统一用一种格式不好吗? ...

最新文章

  1. _捷豹F-pace汽车音响改装黄金声学,中道隔音——哈尔滨小蒋
  2. 大家都纷纷指出了 wp7 的优点 …
  3. Windows服务器上Mqtt服务器EMQX的安装使用
  4. ae这样设置导出比较快 480p比较适合快速看看demo的样子,注意tradeoff
  5. DM8168_ETV_V1.1开发板mount主机常见问题
  6. [待解决]自定义头像时使用vue-cropper进行图片裁剪,得到的是base64格式的图片,如何对接file类型的api接口
  7. 2016-12-17 新浪博客服务器挂掉了,所有博客页面都无法打开
  8. usb转并口支持linux,使用PCI转并口实现SJF刷写嵌入式开发板
  9. Google搜索正在“死亡”
  10. 【BZOJ2659】算不出的算式,打表找规律
  11. 力学,软体和刚体碰撞响应 以及 层次KDOP_OBB包围盒技术
  12. epic关于win7报错缺失api-ms-win-downlevel-kernel32-l2-1-0.dll
  13. JS小技巧 ----- 在onmousedown事件下避免文本选取
  14. 自定义JSON配置器
  15. MFC(VS2010)编程实例之一(Edit Control控件)
  16. 自制的基Ogre的场景编辑器—OgreSE
  17. 2022年MySQL8 OCP最新题库整理,传授有缘人
  18. 【AD15绘制原理图编译的一些警告的处理】
  19. No Target connected Target DLL has been cancelled(电压问题记录)
  20. revit二开之关联族参数的实现

热门文章

  1. 数据结构算法之子集树
  2. c语言如何乘分数,C语言分数相乘程序简化问题。
  3. 计算学生分数的最大值,最小值和总分
  4. 朋友圈广告投放优势及广告投放案例分享
  5. 服装ERP应用 四 从手工到Web 2 0时代的VIP客户管理
  6. 数据库里面date类型时间有时差,时区问题
  7. Git 学习笔记 ignore 忽略文件
  8. linux chrome 硬件加速,在Chrome上开启硬件加速和预先渲染的方法技巧
  9. 负责将用户输入的信息转化为计算机,计算机基础复习题参考答案-
  10. Windows Installer和即点即用版本的Office程序不能并行的问题