帮忙看一段关于赋值的verilog程序

帮忙看一段关于赋值的verilog程序,第1张

首先:最好写成非阻塞赋值,保证所有的信号是同时置0的

if(rst)

begin

data0[3:0]<=0;

data1[3:0]<=0;

data2[3:0]<=0;

end

其次,你是否确定你的rst是高电平复位,而不底电平复位吗?

如果 是低电平复位,应写成:

always @(posedge key1 or negedge rst) //个位加

if(!rst)

begin

data0[3:0]<=0;

data1[3:0]<=0;

data2[3:0]<=0;

end

望采纳,欢迎追问~~

1 case语句第一条

casez ({present_state, coin_in, detect_car, reset})

{STATE_BLOCKING, 3'b10}:

begin

boom_up = UP;

next_state = STATE_RECEIVING;

end

对应状态图:

含义:当栏杆处于“阻隔”(blocking)状态时,只要发现刷卡(coin_in=1),则抬起栏杆(boom_up=1),下一个状态即进入到放行(receiving)状态;

2 case语句第二条

{STATE_BLOCKING, 3'b00}:

begin

boom_up = DOWN;

next_state = STATE_BLOCKING;

end

对应状态图:

含义:当栏杆处于“阻隔”(blocking)状态时,如果没有恢复初始状态信号(reset=0),也没有刷卡(coin_in=0),则无论有没有检测到汽车(detect_car=x),栏杆都保持放下(boom_up=0),下一个状态保持原来的“阻隔”(blocking)状态。

3 case语句第三条

{1'b, 3'b1}:

begin

boom_up = DOWN;

next_state = STATE_BLOCKING;

end

对应状态图:

含义:不管原来状态是什么,只要恢复初始状态信号有效(reset=1),则栏杆保持放下(boom_up=0),下一个状态保持原来的“阻隔”(blocking)状态。

4 case语句第四条

{STATE_RECEIVING, 3'b00}:

begin

boom_up = UP;

next_state = STATE_RECEIVING;

end

对应状态图:

含义:放行状态下,无论有没有刷卡(coin_in=x),只要没有检测到汽车(car_detect=0),没有reset信号,则栏杆保持抬起(boom_up=1),下一个状态保持原来的“放行”(receiving)状态。

5 case语句第五个状态

{STATE_RECEIVING, 3'b10}:

begin

boom_up = DOWN;

next_state = STATE_BLOCKING;

end

对应状态图:

含义:放行状态下,无论有没有刷卡(coin_in=x),如果检测到汽车(car_detect=1),没有reset信号,则栏杆放下(boom_up=0),下一个状态进入到“阻隔”(blocking)状态。

关于时序逻辑解释:

always @(posedge clock)

begin

present_state <= next_state;

end

含义:在时钟的上升沿,将组合逻辑完成的下一个状态(next_state,组合逻辑电路输出)保存进状态寄存器(present_state,时序逻辑输出)

verilog是硬件描述语言,不是软件。一般情况下,硬件的运行速度仅取决于系统时钟频率。但随着时钟频率的提高,关键路径成为制约硬件速度的瓶颈。至于最高速度,要基于具体的工艺库,并用DC、PT等专业软件做静态时序分析才能得出来。

二处错误:第一是在 count<=count+23'dl;这句,d后面是数字1,而你的是字母l。第二处是在最后一句,end module ,不应该有空格分开的,应是:endmodule

下面是修改后的:

module LED(

clk48M,

RST,

ledout

);

input clk48M;

input RST;

output ledout;

reg led_reg;

wire led_clk;

reg[22:0] count;

assign led_clk=count[22];

always@(posedge clk48M or posedge RST)

if(RST)

count<=23'd0;

else

count<=count+23'd1;

always@(posedge led_clk or posedge RST)

if(RST)

led_reg<=0;

else

led_reg<=~led_reg;

assign ledout=led_reg;

endmodule

以上就是关于帮忙看一段关于赋值的verilog程序全部的内容,包括:帮忙看一段关于赋值的verilog程序、verilog程序分析、您好!谢谢您的回答,我想问问给定一段RTL代码,即一段verilog的程序,怎么知道这段程序的运行多长时间呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9859724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存