Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >日常记录(14)VIM

日常记录(14)VIM

作者头像
嘘、小点声
发布于 2021-12-20 11:12:33
发布于 2021-12-20 11:12:33
26000
代码可运行
举报
文章被收录于专栏:嘘、小点声嘘、小点声
运行总次数:0
代码可运行

vim配置

在vimrc原配置的基础上。

gg=G 自动修正缩进

>G代码右缩进

<G代码左缩进

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set nu
imap <S-[> <Esc>
autocmd CursorMoved * silent! exe printf('match Underlined /\<%s\>/', expand('<cword>'))
autocmd CursorHold * silent! exe printf('match Underlined /\<%s\>/', expand('<cword>'))
set mouse=a
autocmd vimenter * NERDTree

NEADTree的按键

https://yang3wei.github.io/blog/2013/01/29/nerdtree-kuai-jie-jian-ji-lu/

C 将选中目录或选中文件的父目录设为根结点

s vsplit 一个新窗口打开选中文件,并跳到该窗口

i split 一个新窗口打开选中文件,并跳到该窗口

仲裁器验证SystemVerilog

DUT部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 module arb (arb_if.DUT arbif);
 2 
 3 parameter IDLE = 2, GRANT0 = 0, GRANT1 = 1;
 4 
 5 reg last_winner;
 6 reg winner;
 7 reg [1:0] next_grant;
 8 
 9 reg [1:0] state, nxState;
10 
11 always @(state or arbif.request or last_winner or arbif.grant)
12 begin
13     nxState = state;        // hold state by default  
14     winner = last_winner;    // hold its value 
15     next_grant = arbif.grant;
16 
17     case(state)
18         IDLE: begin
19             next_grant[0] = arbif.request[0] & ~(arbif.request[1] & ~last_winner);
20             next_grant[1] = arbif.request[1] & ~(arbif.request[0] &  last_winner);
21             if(next_grant[0])
22                 winner = 1'b0;
23             if(next_grant[1])
24                 winner = 1'b1;
25             if(next_grant[0] == 1'b1)
26                 nxState = GRANT0;
27             if(next_grant[1] == 1'b1)
28                 nxState = GRANT1;
29             if(next_grant[1:0] == 2'b11)
30                 $display("ERROR: two grants asserted simultaneously");
31         end      
32 
33         GRANT0: begin
34             if(~arbif.request[0]) begin
35                 next_grant[0] = 1'b0;
36                 nxState = IDLE;
37             end
38         end
39 
40         GRANT1: begin
41             if(~arbif.request[1]) begin
42                 next_grant[1] = 1'b0;
43                 nxState = IDLE;
44             end
45         end
46     endcase
47 end
48 
49 always @(posedge arbif.clk or posedge arbif.reset) begin
50     if (arbif.reset) begin
51         state <= IDLE;
52         last_winner <= 1'b0;
53         arbif.grant <= 2'b00;
54     end
55     else begin    
56         state <= nxState;
57         last_winner <= winner;
58         arbif.grant <= next_grant;
59     end
60 end
61 
62 endmodule

接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 interface arb_if(input bit clk); 
 2   logic [1:0] grant, request; 
 3   logic reset; 
 4 
 5   clocking cb @(posedge clk); 
 6     output request; 
 7     input grant; 
 8   endclocking
 9 
10   modport TEST (clocking cb,
11                 output reset);
12 
13   modport DUT (input request, reset, clk,
14                output grant);
15 
16   modport MONITOR (input request, grant, reset, clk);
17 
18 endinterface

TB部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 program automatic test (arb_if.TEST arbif);
 2 
 3     task reset_test();
 4     begin
 5       $display("Task reset_test: asserting and checking reset");
 6       arbif.reset <= 0;
 7       #100 arbif.reset <= 1;
 8       arbif.cb.request <= 0;
 9       repeat (2) @arbif.cb;
10       arbif.reset <= 0;
11       @arbif.cb;
12       a0: assert (arbif.cb.grant == 2'b00);
13       end
14     endtask
15 
16 
17     task request_grant_test();
18     $monitor("@%0d: grant=%b", $time, arbif.cb.grant);
19     
20     // Test out bit 0
21     $display("Task request_grant_test: asserting and checking reset");
22 
23     ##1 arbif.cb.request <= 2'b01;
24     $display("@%0d: Drove req=01", $time);
25     repeat (2) @arbif.cb;
26     a1: assert (arbif.cb.grant == 2'b01);
27 
28     ##1 arbif.cb.request <= 2'b00;
29     $display("@%0d: Drove req=00", $time);
30     repeat (2) @arbif.cb;
31     a2: assert (arbif.cb.grant == 2'b00);
32 
33     ##1 arbif.cb.request <= 2'b10;
34     $display("@%0d: Drove req=10", $time);
35     repeat (2) @arbif.cb;
36     a3: assert (arbif.cb.grant == 2'b10);
37 
38     ##1 arbif.cb.request <= 2'b00;
39     $display("@%0d: Drove req=00", $time);
40     repeat (2) @arbif.cb;
41     a4: assert (arbif.cb.grant == 2'b00);
42 
43     ##1 arbif.cb.request <= 2'b11;
44     $display("@%0d: Drove req=11", $time);
45     repeat (2) @arbif.cb;
46     a5: assert (arbif.cb.grant == 2'b01);
47 
48     ##1 arbif.cb.request <= 2'b00;
49     $display("@%0d: Drove req=00", $time);
50     repeat (2) @arbif.cb;
51     a6: assert (arbif.cb.grant == 2'b00);
52     endtask
53 
54 
55     initial begin
56       repeat (10) @arbif.cb;
57 
58       reset_test();
59 
60       request_grant_test();
61 
62       repeat (10) @arbif.cb;
63       $finish;
64 
65     end
66 endprogram

TOP部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 `timescale 1ns/1ns
 2 
 3 module top;
 4   bit  clk;
 5   always #5 clk = !clk; 
 6 
 7   arb_if arbif(clk); 
 8   arb a1 (arbif);
 9   test t1(arbif);
10 
11 endmodule

Makefile部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 FILES = top.sv arb.sv arb_if.sv test.sv
 2 FLAGS = -sverilog -debug_all
 3 
 4 run:    simv
 5     ./simv -l simv.log
 6 
 7 gui:    simv
 8     ./simv -gui
 9 
10 simv:    ${FILES}
11     vcs ${FLAGS} ${FILES}
12 
13 
14 DIR = $(shell basename `pwd`)
15 tar:    clean
16     cd ..;tar cvf ${DIR}.tar ${DIR}
17 
18 clean:     
19     @rm -rf csrc simv* *.tcl *.vpd .res* ucli* .ucli* *.old *.txt *.db 
20     @rm -rf *.log *~ */*~ .*/*~

数字逻辑公式

https://blog.csdn.net/xiongshuxian2019/article/details/104614229

异或

同或

所以,当A为req0,B为req1,C为last_win,

\[grant0=A\cdot\bar{B}+A\cdot{C} \\ grant1=\bar{A}\cdot{B}+B\cdot{\bar{C}} \]

grant0置位条件是A为1B为0,或者A为1,C为1

grant1置位条件是A为0B为1,或者B为1,C为0

C是上一次是胜利者,C为1是上一次B赢,为0是上一次A赢。这个是RR类型的仲裁器了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SystemVerilog的一个简单验证demo
是一个简单的memory。就六个信号,时钟信号clk,复位信号reset(高有效),读使能信号rd_en,写使能信号wr_en,写数据信号wdata,读数据信号rdata。
数字IC小站
2020/07/01
2.1K0
【收藏】FPGA数字IC刷题58个Verilog代码及讲解(状态机、跨时钟、同步/异步FIFO、DMUX、奇数/小数分频)
牛客 Verilog 刷题入门篇1~24 + 进阶篇1~34 题解代码,所有代码均能通过测试,配合视频讲解效果更佳。本文给出代码,部分题目给出必要说明。 很多题目本身出题有些问题,着重理解题目,没必要钻牛角尖。
FPGA探索者
2022/11/01
3.1K0
【收藏】FPGA数字IC刷题58个Verilog代码及讲解(状态机、跨时钟、同步/异步FIFO、DMUX、奇数/小数分频)
SystemVerilog验证编写(1)
Testbench的常见组成模块如下,由复位、产生、发送、接收、计分板比对几个模块组成。
数字IC小站
2020/07/01
9160
uart串口通信编程_verilog调用模块端口对应方式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/05
1.3K0
FPGA零基础学习:SDR SDRAM 驱动设计
本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
FPGA技术江湖
2021/03/23
1K0
FPGA零基础学习:SDR SDRAM 驱动设计
Modelsim仿真--波形状态机名称显示
在通常的modelsim波形仿真中,状态机的显示为16进制,如 3‘h1。如下图所示str_cur为状态跳变信号。
FPGA开源工作室
2021/07/30
8720
vcs+verdi仿真Verilog代码
我们以一个简单的加法器为例,来看下如何用vcs+verdi仿真Verilog文件并查看波形。
猫叔Rex
2024/05/21
5290
vcs+verdi仿真Verilog代码
systemverilog之program与module
为避免仿真和设计竞争问题(race condition),systemverilog中引入了program的概念。
数字IC小站
2020/06/30
1.6K0
verilog_移位寄存器_仿真(程序逐句解释)
  之前老是想着学的快点,就直接编译了程序就下载在开发板上跑,后来发现这样不行,因为如果程序有问题,验证和纠错的时间成本太高了(毕竟vivado跑一次花的时间很长),反过来学习仿真,下面是一点心得和体会。
全栈程序员站长
2022/09/13
9800
verilog_移位寄存器_仿真(程序逐句解释)
HDLBits:在线学习 Verilog (二十二 · Problem 105 - 109)
用计数器设计一个带am/pm的12小时时钟。该计数器通过一个CLK进行计时,用ena使能信号来驱动时钟的递增。
数字积木
2021/04/15
7080
HDLBits: 在线学习 SystemVerilog(十七)-Problem 106-114(移位寄存器)
HDLBits 是一组小型电路设计习题集,使用 Verilog/SystemVerilog 硬件描述语言 (HDL) 练习数字硬件设计~
碎碎思
2023/02/14
7910
HDLBits: 在线学习 SystemVerilog(十七)-Problem 106-114(移位寄存器)
基于迭代单元的不恢复余数开方器基于迭代单元的不恢复余数开方器
基于迭代单元的不恢复余数开方器 基本算法 与恢复余数开方器类似,不恢复余数开方器也是通过迭代完成运算的,基本算法的伪代码如下所示 Ra = 被开方数(位宽2W) Re = 余数(初值为0) Dout = 0 for i in W -> 0 { if(Re > 0) { Re = {Re,Ra[2i - 1],Ra[2i]} - {Dout,2'b01} } else { Re = {Re,Ra[2i - 1],Ra[2i]} + {Dout,2'b11} } Dout = {
月见樽
2018/04/27
1.2K0
Testbench编写指南(1)基本组成与示例
文章转自:https://blog.csdn.net/FPGADesigner/article/details/82021647
碎碎思
2020/06/30
2.7K0
FPGA之SDRAM控制器设计(一)
MT48LC128M4A2 – 32 Meg x 4 x 4 banks是512M SRAM,总体概述如下图
全栈程序员站长
2022/07/28
3450
FPGA之SDRAM控制器设计(一)
同步计数器设计与建模
计数器的基本功能是对输入时钟脉冲进行计数。它也可用于分频、定时、产生节拍脉冲和脉冲序列及进行数字运算等。
timerring
2023/02/24
8970
同步计数器设计与建模
题解 | Verilog刷题解析及对应笔试面试注意点【1-5】(涉及复位、有符号数问题等)
目的:不仅仅是解题,更多的是想从真实的FPGA和数字IC实习秋招和实际工程应用角度,解读一些【笔试面试】所注意的知识点,做了一些扩展。
FPGA探索者
2022/05/26
8450
题解 | Verilog刷题解析及对应笔试面试注意点【1-5】(涉及复位、有符号数问题等)
HDLBits答案(12)_Verilog移位寄存器「建议收藏」
今天更新一节寄存器相关内容,其中涉及CRC校验的内容是用线性反馈移位寄存器搭建而成的。
全栈程序员站长
2022/09/13
2360
HDLBits答案(12)_Verilog移位寄存器「建议收藏」
基于FPGA的VGA/LCD显示控制器系统设计(中)
今天给大侠带来基于FPGA的VGA/LCD显示控制器设计,由于篇幅较长,分三篇。今天带来第二篇,中篇,VGA 显示原理以及VGA/LCD 显示控制器的基本框架,话不多说,上货。
FPGA技术江湖
2021/05/21
1.6K0
基于FPGA的VGA/LCD显示控制器系统设计(中)
[十五]Cracking Digital VLSI Verification Interview
多个sequence可以与同一个接口的driver并发交互。sequencer支持多种仲裁机制,以确保在任何时间点只有一个sequence可以访问driver。哪个sequence可以发送sequence_item取决于用户选择的仲裁机制。在UVM中实现了五种内置的仲裁机制。还有一个附加的回调函数可以实现用户定义的算法。sequencer具有一种称为set_arbitration()的方法,可以调用该方法来选择sequencer应使用哪种算法进行仲裁。可以选择的六种算法如下:
空白的贝塔
2020/06/24
1.2K0
带选通信号的同步FIFO(可综合RTL设计)
上次讲的是用SystemVerilog去设计这个FIFO,那么如果用可综合的RTL代码怎么设计呢?
数字IC小站
2020/07/01
7680
推荐阅读
相关推荐
SystemVerilog的一个简单验证demo
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验