在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2588|回复: 8

[求助] verilog编程的小问题,求指教!

[复制链接]
发表于 2020-12-31 15:15:47 | 显示全部楼层 |阅读模式
1资产
当信号a为高的时候,将b置为高,之后a变为高或低b都保持为高,直到c为高。

请问上述逻辑如何编程实现呢?求指教!

 楼主| 发表于 2020-12-31 15:17:46 | 显示全部楼层
在设计中使用,不能使用while语句,想了半天没想到如何实现....望大佬指点
发表于 2020-12-31 15:34:15 | 显示全部楼层
module test(
    input   wire    a,
    input   wire    c,

    output  reg     b
);

always @(*) begin
    if(c)
        b = 1'b0;
    else if(a)
        b = 1'b1;
    else
        b = b;
end

endmodule

module test_tb;
reg     a;
reg     c;
wire    b;

initial begin
        a = 0;
        c = 0;
    #10
        a = 1;
    #10
        a = 0;
    #10
        c = 1;
    #100
        $stop;
end

test u_test(
    .a ( a ),
    .c ( c ),
    .b  ( b  )
);

endmodule


 楼主| 发表于 2020-12-31 16:10:16 | 显示全部楼层


Abyss817 发表于 2020-12-31 15:34
module test(
    input   wire    a,
    input   wire    c,


感谢~元旦快乐
发表于 2020-12-31 16:45:54 | 显示全部楼层
module my_design(clk, rst, a, c, b);
input clk;
input rst;
input a;
input c;
output b;

wire a;
wire c;
reg b;

always@(posedge clk or negedge rst)
begin
     if(!rst)
          begin
               b <= 0;
          end
          else if(c == 1)
          begin
               b <= 0;
          end
          else if(a == 1)
          begin
               b <= 1;
          end
          else b <= b;
end

endmodule
发表于 2020-12-31 16:46:42 | 显示全部楼层
`timescale 1ns/1ps  //时间精度
`define    Clock 20 //时钟周期
module tb();
reg clk;
reg rst;
reg a;
reg c;

wire b;

my_design U_design(
                  .clk(clk),
                  .rst(rst),
                  .a(a),
                  .b(b),
                  .c(c));

initial begin
        clk = 1;
       forever
       #(`Clock/2) clk = ~clk;
end
  
initial begin
      rst = 0; #(`Clock*20);
      rst = 1;
end

initial
begin
       a=0;
       c=0;
       #(`Clock*30)  a=1;
       #(`Clock*10)  a=0;
       #(`Clock*10)  a=0;
       #(`Clock*10)  a=1;
       #(`Clock*40)  c=1;


       #(`Clock*100)    $finish;
end

initial
begin
       $fsdbDumpfile("tb.fsdb");
       $fsdbDumpvars(0,"tb");
end


endmodule      
发表于 2020-12-31 16:48:26 | 显示全部楼层

`timescale 1ns/1ps  //时间精度
`define    Clock 20 //时钟周期
module tb();
reg clk;
reg rst;
reg a;
reg c;

wire b;

my_design U_design(
                  .clk(clk),
                  .rst(rst),
                  .a(a),
                  .b(b),
                  .c(c));

initial begin
        clk = 1;
       forever
       #(`Clock/2) clk = ~clk;
end
  
initial begin
      rst = 0; #(`Clock*20);
      rst = 1;
end

initial
begin
       a=0;
       c=0;
       #(`Clock*30)  a=1;
       #(`Clock*10)  a=0;
       #(`Clock*10)  a=0;
       #(`Clock*10)  a=1;
       #(`Clock*40)  c=1;


       #(`Clock*100)    $finish;
end

initial
begin
       $fsdbDumpfile("tb.fsdb");
       $fsdbDumpvars(0,"tb");
end


endmodule      
 楼主| 发表于 2020-12-31 18:50:53 | 显示全部楼层


Marion_ 发表于 2020-12-31 16:46
`timescale 1ns/1ps  //时间精度
`define    Clock 20 //时钟周期
module tb();


感谢
发表于 2021-1-5 09:24:44 | 显示全部楼层
kankan
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-24 10:45 , Processed in 0.026903 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表